First Array
[{'value':'one','other':'othervalue'},{value:'two'},{value:'three'},{value:'four'}]
第二阵列
['one','two','six','five']
这里我想将第二个数组值添加到第一个数组的value属性中,如果有唯一的.if dublicate exists代码必须跳过它。我试过循环所有的值,如
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) ;
}
答案 0 :(得分: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);
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
答案 1 :(得分:1)
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);
&#13;
在这里制作字典我假设original
没有任何重复开头。
答案 2 :(得分:1)
尽管使用哈希表或字典可能会有性能优势,但最直接的实现是
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}); });
上面的代码不会处理第二个数组中的重复项,因此如果这是一个问题,您需要相应地进行调整。