我知道这个标题可能听起来令人困惑,但我使用$ .each被困了一个小时。基本上我有2个阵列
[{"section_name":"abc","id":1},{"section_name":"xyz","id":2}];
和[{"toy":"car","section_id":1},{"tool":"knife","section_id":1},{"weapons":"cutter","section_id":2}];
我如何将一个作为一个新的属性键放入另一个,如
[{
"section_name": "abc",
"id": 1,
"new_property_name": [{
"toy": "car"
}, {
"tool": "knife"
}]
}, {
"section_name": "xyz",
"id": 2,
"new_property_name": [{
"weapon": "cutter"
}]
}]
答案 0 :(得分:4)
ES6解决方案:
<div class="pageloading-mask">
<div></div>
</div>
编辑:与评论中提到的georg一样,上面的解决方案实际上是在变异const arr = [{"section_name":"abc","id":1},{"section_name":"xyz","id":2}];
const arr2 = [{"toy":"car","id":1},{"tool":"knife","id":1},{"weapons":"cutter","id":2}];
const res = arr.map((section,index) => {
section.new_property_name = arr2.filter(item => item.id === section.id);
return section;
});
,它会修改原始arr
(如果你在映射后记录arr,你会发现它已经改变了,突变arr
并拥有arr
)。它使new_property_name
变得无用,简单的.map()
确实更合适并且保存了一行。
forEach()
答案 1 :(得分:1)
试试这个
var data1 = [{"section_name":"abc","id":1},{"section_name":"xyz","id":2}];
var data2 = [{"toy":"car","id":1},{"tool":"knife","id":1},{"weapons":"cutter","id":2}];
var map = {};
//first iterate data1 the create a map of all the objects by its ids
data1.forEach( function( obj ){ map[ obj.id ] = obj });
//Iterate data2 and populate the new_property_name of all the ids
data2.forEach( function(obj){
var id = obj.id;
map[ id ].new_property_name = map[ id ].new_property_name || [];
delete obj.id;
map[ id ].new_property_name.push( obj );
});
//just get only the values from the map
var output = Object.keys(map).map(function(key){ return map[ key ] });
console.log(output);
&#13;
答案 2 :(得分:1)
您可以使用哈希表查找并构建一个新对象以插入$('[contenteditable]').on('keydown', function(e) {
if (e.which === 9) {
//prevent from tabbing out
e.preventDefault();
var ce = this;
var $ce = $(ce);
var html = $ce.html();
var textNode = ce.firstChild;
var range = document.createRange();
var position = getSelection().getRangeAt(0).startOffset;
//place tab at cursor position
$ce.html([html.slice(0, position), '	', html.slice(position)].join(''));
//reset cursor position and place it after the tab
ce.focus();
range.setStart(textNode, position + 1);
range.setEnd(textNode, position + 1);
var sel = window.getSelection();
sel.removeAllRanges();
sel.addRange(range);
}
});
数组。
new_property_name
&#13;
答案 3 :(得分:0)
似乎可以通过使用Jquery $.merge()
函数来实现您的需求。然后我们也有concat
函数,可用于将一个数组与另一个数组合并。
答案 4 :(得分:0)
使用Object.assign()
在您的情况下,您可以像Object.assign(array1[0], array2[0])
那样执行此操作。
它非常适合组合对象,因此在您的情况下,您只需要在数组中组合对象。
代码示例:
var objA = [{"section_name":"abc","id":1},{"section_name":"xyz","id":2}];
var objB = [{"toy":"car","section_id":1},{"tool":"knife","section_id":1},{"weapons":"cutter","section_id":2}];
var objC = Object.assign({},objA[0],objB[0]);
console.log(JSON.stringify(objC));// {"section_name":"abc","id":1,"toy":"car","section_id":1}
有关详细信息,请参阅此处:Object.assign()
答案 5 :(得分:0)
var firstArray = [{"section_name":"abc","id":1},{"section_name":"xyz","id":2}],
secondArray = [{"toy":"car","section_id":1},{"tool":"knife","section_id":1},{"weapons":"cutter","section_id":2}];
var hash = Object.create(null);
firstArray.forEach(s => {
hash[s.id] = s;
s['new_property_name'] = [];
});
secondArray.forEach(i => hash[i['section_id']]['new_property_name'].push(i));
console.log(firstArray);
&#13;