JSON中的2个阵列
问题描述:
我想用键和值在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;
}
});
答
按照承诺,这是一个总结同一水果值的新版本请注意,这些值是更加方便添加的整数。无论如何,如果你绝对想要字符串使用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
答
下面是一个简单的例子: 我做一个简单的功能,只是为了改变平板阵列成对象的数组,然后我把两个静止阵列到另一个数组
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;
}
你尝试过什么呢? –
JSON是用于数据交换的*文本符号。 [(More here。)](http://*.com/a/2904181/157247)如果你正在处理JavaScript源代码,而不是处理*字符串*,那么你并没有处理JSON。 –
你想做的事情包括将字符串“Orange:10”分成不同的值,这不仅仅是数组的排列。 – Danmoreng