我有一个对象数组和2个数组来进行比较。基于数组中元素和对象中键的比较,需要将对象转换为新对象。
例如
原始对象如下
[{
'Period 1': 1000.00
'Period 2': 2500.00
'Period 3': 1500.00
'Product': 'ABC'
},
{
'Period 1': 3000.00
'Period 2': 1500.00
'Period 3': 2500.00
'Product': 'XYZ'
}]
数组如下
var arr1 = ['Product']
var arr2 = ['Period 1','Period 2','Period 3']
基于对象中上述数组的比较的预期结果必须如下
[
{
'name': 'ABC'
'data': [1000.00,2500.00,1500.00]
},
{
'name': 'XYZ'
'data': [3000.00,1500.00,2500.00]
}
]
答案 0 :(得分:-1)
使用类似下面的内容来实现所需的对象类型
var finalArr = [];
for (var i = 0; i < obj.length; i++) {
var tempArr = [];
var tempObj = {};
for (var j = 0; j < arr2.length; j++) {
tempArr.push(parseFloat(obj[i][arr2[j]]))
}
tempObj.name = obj[i][arr1];
tempObj.data = tempArr;
finalArr.push(dataTemp);
}
答案 1 :(得分:-1)
试试这段代码:
希望有所帮助。
var ori = [{
'Period 1': 1000.00,
'Period 2': 2500.00,
'Period 3': 1500.00,
'Product': 'ABC'
},
{
'Period 1': 3000.00,
'Period 2': 1500.00,
'Period 3': 2500.00,
'Product': 'XYZ'
}];
function oriVal(prop){
var arr = new Array();
for(var i = 0;i < ori.length; i++){
for(var p in ori[i]){
if(p == prop){arr.push(ori[i][p]);}
}
}
return arr;
}
Array.prototype.pushRange = function(arr){
for(var i = 0;i < arr.length; i++){
this.push(arr[i]);
}
}
function formName(keyArr){
var retArr = formArr(keyArr);
return {name:retArr.join(',')};
}
function formData(keyArr){
var retArr = formArr(keyArr);
return {data:retArr.join(',')};
}
function formArr(keyArr){
var retArr = new Array();
for(var i = 0;i < keyArr.length;i++){
var oArr = oriVal(keyArr[i]);
retArr.pushRange(oArr);
}
return retArr;
}
function nameData(){
var nameObj = formName(["Product"]);
var dataObj = formData(['Period 1','Period 2','Period 3']);
return {name:nameObj['name'],data:dataObj['data']};
}
console.log(nameData());