如何在 Javascript 中合并两个数组
2016-12-12
558
第一个数组
[{'value':'one','other':'othervalue'},{value:'two'},{value:'three'},{value:'four'}]
第二个数组
['one','two','six','five']
如果存在唯一值,我想将第二个数组值添加到第一个数组的值属性中。如果存在重复,代码必须跳过该操作。我尝试循环所有值,例如
for( var i=0; i < eLength; i++ ) {
for( var j = 0; j < rLength; j++ ) {
if( temp[j].values != enteredValues[i] ) {
console.log()
var priority = enteredValues.indexOf( enteredValues[i] ) + 1;
var obj = { 'values': enteredValues[i] };
}
}
reportbody.push( obj) ;
}
3个回答
您可以通过使用循环数据设置对象,将对象用作对象数组中值的哈希表。
然后检查值是否存在于数组中,如果不在,则将新对象推送到数据数组。
var data = [{ value: 'one', other: 'othervalue' }, { value: 'two' }, { value: 'three' }, { value: 'four' }],
values = ['one', 'two', 'six', 'five', 'six'],
hash = Object.create(null);
data.forEach(function (a) {
hash[a.value] = true;
});
values.forEach(function (a) {
if (!hash[a]) {
hash[a] = true;
data.push({ value: a });
}
});
console.log(data);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Nina Scholz
2016-12-12
var original = [{'value':'one','other':'othervalue'},{value:'two'},{value:'three'},{value:'four'}];
var toAdd = ['one','two','six','five'];
// First make a dictionary out of your original array
// This will save time on lookups
var dictionary = original.reduce(function(p,c) {
p[c.value] = c;
return p;
}, {});
// Now for each item in your new list
toAdd.forEach(function(i) {
// check that it's not already in the dictionary
if (!dictionary[i]) {
// add it to the dictionary
dictionary[i] = { value: i };
// and to your original array
original.push(dictionary[i]);
}
});
console.log(original);
在这里制作字典时,我假设
原始
没有任何重复项。
Matt Burland
2016-12-12
尽管使用哈希表或字典可能具有性能优势,但最直接的实现是
second.forEach(s => {
if (!first.find(f => f.value === s)) first.push({value: s});
});
如果您确实想使用哈希表,从语义上讲,可能更喜欢使用 Set:
const dict = new Set(first.map(f => f.value));
second.forEach(s => { if (!dict.has(s)) first.push({value: s}); });
上述代码不会处理第二个数组中的重复项,因此如果这是一个问题,您需要进行相应的调整。
2016-12-12