使用jQuery将对象转换为另一个对象

问题描述:

我在我想要转换为另一个对象的JavaScript文件中获取结果。使用jQuery将对象转换为另一个对象

我原来的结果

[ 
    { 
    "SName": "Set1", 
    "Elements": [ 
     { 
     "Id": "3", 
     "Name": "Name1" 
     }, 
     { 
     "Id": "5", 
     "Name": "Name2" 
     } 
    ] 
    }, 
    { 
    "SName": "Set2", 
    "Elements": [ 
     { 
     "Id": "7", 
     "Name": "Name3" 
     }, 
     { 
     "Id": "8", 
     "Name": "Name4" 
     } 
    ] 
    } 
] 

转换这个看起来像使用jQuery或JavaScript对象的数组。我怎样才能做到这一点?

[ 
    { 
    "SName": "Set1", 
    "Id": 3, 
    "Name": "Name1" 
    }, 
    { 
    "SName": "Set1", 
    "Id": 5, 
    "Name": "Name2" 
    }, 
    { 
    "SName": "Set2", 
    "Id": 7, 
    "Name": "Name3" 
    }, 
    { 
    "SName": "Set2", 
    "Id": 8, 
    "Name": "Name4" 
    } 
] 
+0

只需循环值并重新对齐它们。你不需要使用jQuery。 – modernator

var data =  [ 
    { 
    "SName": "Set1", 
    "Elements": [ 
     { 
     "Id": "3", 
     "Name": "Name1" 
     }, 
     { 
     "Id": "5", 
     "Name": "Name2" 
     } 
    ] 
    }, 
    { 
    "SName": "Set2", 
    "Elements": [ 
     { 
     "Id": "7", 
     "Name": "Name3" 
     }, 
     { 
     "Id": "8", 
     "Name": "Name4" 
     } 
    ] 
    } 
]; 
console.log(data); 

var newData = data.reduce(function (newArray, currentSet) { 
    return newArray.concat(currentSet.Elements.map(function (element) { 
     return Object.assign({ SName: currentSet.SName }, element); 
    })); 
}, []); 

console.log(newData); 

这里的关键是reduce功能。我们正在做的是通过遍历外部数组的每个值来创建一个全新的数组。我们连续使用concat将我们映射到内部数组的值插入到新数组中。

+0

仅供参考。支持IE使用$ .extend而不是Object.assign。 – PSR

你可以遍历数组,该Elements和性能,并建立一个新的对象,并将它推到结果集。

var array = [{ "SName": "Set1", "Elements": [{ "Id": "3", "Name": "Name1" }, { "Id": "5", "Name": "Name2" }] }, { "SName": "Set2", "Elements": [{ "Id": "7", "Name": "Name3" }, { "Id": "8", "Name": "Name4" }] }], 
 
    result = []; 
 

 
array.forEach(function (a) { 
 
    a.Elements.forEach(function (b) { 
 
     var o = { SName: a.SName }; 
 
     Object.keys(b).forEach(function (k) { 
 
      o[k] = b[k]; 
 
     }); 
 
     result.push(o); 
 
    }); 
 
}); 
 

 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

ES6

var array = [{ "SName": "Set1", "Elements": [{ "Id": "3", "Name": "Name1" }, { "Id": "5", "Name": "Name2" }] }, { "SName": "Set2", "Elements": [{ "Id": "7", "Name": "Name3" }, { "Id": "8", "Name": "Name4" }] }], 
 
    result = []; 
 

 
array.forEach(a => a.Elements.forEach(b => result.push(Object.assign({ SName: a.SName }, b)))); 
 

 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

+0

仅供参考。支持IE使用$ .extend而不是Object.assign。 – PSR

+0

'$'是jquery的一部分,不是吗? –

+0

是的。它是jQuery的一部分。 – PSR

您可以reduce()forEach()Object.assign()

做到这一点210

var data = [{ 
 
    "SName": "Set1", 
 
    "Elements": [{ 
 
    "Id": "3", 
 
    "Name": "Name1" 
 
    }, { 
 
    "Id": "5", 
 
    "Name": "Name2" 
 
    }] 
 
}, { 
 
    "SName": "Set2", 
 
    "Elements": [{ 
 
    "Id": "7", 
 
    "Name": "Name3" 
 
    }, { 
 
    "Id": "8", 
 
    "Name": "Name4" 
 
    }] 
 
}] 
 

 
var result = data.reduce(function(r, e) { 
 
    e.Elements.forEach(function(o) { 
 
    r.push(Object.assign({SName: e.SName}, o)) 
 
    }) 
 
    return r; 
 
}, []) 
 

 
console.log(result)

+0

仅供参考。支持IE使用$ .extend而不是Object.assign。 – PSR

下面是使用jQuery的解决方案,在这里的jsfiddle:

https://jsfiddle.net/noitse/3uk9qjnf/

我希望你知道所有关键的名称,以便它不会是问题,做固定。

var json = [ 
    { 
    "SName": "Set1", 
    "Elements": [ 
     { 
     "Id": "3", 
     "Name": "Name1" 
     }, 
     { 
     "Id": "5", 
     "Name": "Name2" 
     } 
    ] 
    }, 
    { 
    "SName": "Set2", 
    "Elements": [ 
     { 
     "Id": "7", 
     "Name": "Name3" 
     }, 
     { 
     "Id": "8", 
     "Name": "Name4" 
     } 
    ] 
    } 
] 

var newJSON = [] 

$(json).each(function(index,value){ 

    $(value.Elements).each(function(index1,value1){ 
     newJSON.push({"SName":value.SName,"Id":value1.Id,"Name":value1.Name}) 
}) 

}) 

alert(JSON.stringify(newJSON)) 

下面是代码,它做什么,它遍历第一JSON,然后通过它的元素循环,然后把它推到新阵列

你可以使用$ .extend方法,它可以让你创建一个对象的副本,同时与另一个对象合并。您可以运行代码in this fiddle