2017-10-18 58 views
-4

我想用键和值在JSON中连接两个数组。JSON中的2个阵列

MyArray1 [ "Orange:10", "Orange:5", "Banana:20", "Apple:5" ] 
MyArray2 [ "Orange:5", "Banana:10", "Apple:15" ] 

MyJSON [ 
     {"fruit": "Orange", "value": 15}, 
     {"fruit": "Banana", "value": 20}, 
     {"fruit": "Apple ", "value": 5}, 
    ],[ 
     {"fruit": "Orange", "value": 5}, 
     {"fruit": "Banana", "value": 10}, 
     {"fruit": "Apple ", "value": 15}, 
    ] 
    ] 

我已经试过,但我需要一个键和值和Concat的我2个阵列:

MyArray1.forEach(function(val) { 
        var item = val.split(":"); 
        var key = item[0]; 
        var num = parseInt(item[1], 10); 

        if (MyArray1.hasOwnProperty(key)) { 
        MyArray1[key] += num; 
        } else { 
         MyArray1[key] = num; 
        } 
       }); 
+5

你尝试过什么呢? –

+2

JSON是用于数据交换的*文本符号。 [(More here。)](http://stackoverflow.com/a/2904181/157247)如果你正在处理JavaScript源代码,而不是处理*字符串*,那么你并没有处理JSON。 –

+0

你想做的事情包括将字符串“Orange:10”分成不同的值,这不仅仅是数组的排列。 – Danmoreng

回答

0

按照承诺,这是一个总结同一水果值的新版本请注意,这些值是更加方便添加的整数。无论如何,如果你绝对想要字符串使用arr [i] .value = arr [i] .value.toString(); 请给我一个反馈。

var myArray1 = [ "Orange:10", "Orange:5", "Banana:20", "Apple:5" ]; 
 
var myArray2 = [ "Orange:5", "Banana:10", "Apple:15" ]; 
 

 
var myObjectArray1 = arrayToObjectArray(myArray1); 
 
var myObjectArray2 = arrayToObjectArray(myArray2); 
 

 
var myOnlyOneObjectArray= myObjectArray1.concat(myObjectArray2); 
 

 
var myResult = mergeObjectArray(myOnlyOneObjectArray,"fruit","value") 
 

 
console.log(myResult); 
 

 
function arrayToObjectArray(arr){ 
 
// Map allows us to return a transformed row for each array row 
 
var arr2 = arr.map(function(item) { 
 
\t var items = item.split(":"); 
 
\t item = {}; 
 
\t item.fruit = items[0]; 
 
\t item.value = parseInt(items[1]); 
 
\t return item; 
 
}); 
 
return arr2; 
 
} 
 
    
 
    
 
function mergeObjectArray(arr,compareKey,addKey){ 
 
\t // Pay attention : we loop thru the same arr searching from end to start (i) 
 
\t // and check if the same fruit already exist (second loop j from start to one row before i) 
 
\t // that way we can sum any number of concated arrays and even dupes in the same original array 
 
    \t for(var i = arr.length-1; i >=0;i--){ 
 
\t \t for(var j = 0; j < arr.length -1;j++){ // Note that an objet property can be accessed also this way arr[i]["fruit"] == arr[i].fruit == arr[i][compareKey] 
 
\t \t \t if((arr[i][compareKey]==arr[j][compareKey]) && (i!=j)){ // if the fruit (compare key) is the same (has been found) 
 
\t \t \t \t arr[j][addKey]+=arr[i][addKey]; // we sum 
 
\t \t \t \t arr.splice(i, 1); // we get rid of row (from end to start i, not to mess with the offset of the loop) 
 
\t \t \t \t break; 
 
\t \t \t } 
 
\t \t } \t 
 
\t } 
 
return arr; 
 
}

+0

谢谢你的帮助! – pifou

-1

下面是一个简单的例子: 我做一个简单的功能,只是为了改变平板阵列成对象的数组,然后我把两个静止阵列到另一个数组

var myArray1 = [ "Orange:10", "Orange:5", "Banana:20", "Apple:5" ]; 
 
var myArray2 = [ "Orange:5", "Banana:10", "Apple:15" ]; 
 

 
var myArray1b = arrayToObjectArray(myArray1); 
 
var myArray2b = arrayToObjectArray(myArray2); 
 

 
var myResult = [myArray1b,myArray2b]; 
 

 
console.log(myResult); 
 

 
function arrayToObjectArray(arr){ 
 
var arr2 = arr.map(function(item) { 
 
var items = item.split(":"); 
 
item = {}; 
 
item.fruit = items[0]; 
 
item.value = items[1]; 
 

 
return item; 
 
}); 
 
return arr2; 
 
}

+0

谢谢,但我想为每个阵列添加相同的项目 – pifou

+0

我没有得到:你没有显示你在MyJSON中的预期?你只想从2个平面数组中取出一个对象数组? – PhilMaGeo

+0

如果这就是你想要做的: var arr3 = myArray1.concat(myArray2); var myResult = arrayToObjectArray(arr3); – PhilMaGeo