[英]Compare two arrays having objects and remove duplicates from first array
[英]Compare two Arrays and replace Duplicates with values from a third array
var array1 = ['a','b','c','d'];
var array2 = ['a','v','n','d','i','f'];
var array3 = ['1','2','3','4','5','6'];
刚开始学习Javascript时,我不知道如何将array2
的值与array1
上的值进行比较,如果是这样,则将其替换为array3
对应的数组索引。
要这样转:
array2 = ['1','v','n','4','i','f'];
但是,即使索引位置不同,它也必须比较array1和array2的值:
var array1 = ['a','b','c','d'];
var array2 = ['d','v','n','a','i','f'];
谢谢您的帮助
使用Array.prototype.reduce
检查重复项并创建一个新数组-请参见下面的演示:
var array1 = ['a','b','c','d']; var array2 = ['a','v','n','d','i','f']; var array3 = ['1','2','3','4','5','6']; var result = array2.reduce(function(p,c,i){ if(array1.indexOf(c) !== -1) { p.push(array3[i]); } else { p.push(c); } return p; },[]); console.log(result);
您可以在array2上使用map()
,查看当前元素是否与具有相同索引的array1中的元素相同,如果它是来自array3的具有i
索引的返回元素,则返回当前元素或e
var array1 = ['a', 'b', 'c', 'd']; var array2 = ['a', 'v', 'n', 'd', 'i', 'f']; var array3 = ['1', '2', '3', '4', '5', '6']; var result = array2.map(function(e, i) { return e == array1[i] ? array3[i] : e; }) console.log(result)
array2.map((v, i) => v === array1[i] ? array3[i] : v);
形式很多,这是基本形式:
var array1 = ['a','b','c','d'];
var array2 = ['a','v','n','d','i','f'];
var array3 = ['1','2','3','4','5','6'];
var result = [];//define array of result
for(var i=0;i<array2.length;i++){//Iterate the array2
if(array2[i] == array1[i])//Compare if array1 in index 'i' with array2 in index 'i'
result[i] = array3[i];//if true put in result in index 'i' from array3
else
result[i] = array2[i];//else put in result in index 'i' from array2
}
console.log(result);//show in console the result
在这里,您有一些代码可以满足您的要求:
var array1 = ['a','b','c','d'];
var array2 = ['a','v','n','d','i','f'];
var array3 = ['1','2','3','4','5','6'];
var biggerArrayLength = 0;
if(array1.length > array2.length){
biggerArrayLength = array1.length;
}else{
biggerArrayLength = array2.length;
}
for(var i = 0; i < biggerArrayLength; i++){
if(array1[i] == array2[i]){
array2[i] = array3[i];
}
}
希望能帮助到你!
您可以使用哈希表进行检查。 如果该字符串未包含在哈希表中,则为此元素设置一个替换值。
var array1 = ['a','b','c','d'], array2 = ['d','v','n','a','i','f'], array3 = ['1','2','3','4','5','6'], hash = Object.create(null); array1.forEach(function (a) { hash[a] = true; }); array2.forEach(function (a, i, aa) { if (hash[a]) { aa[i] = array3[i]; } }); console.log(array2);
ES6 Set
var array1 = ['a','b','c','d'], array2 = ['d','v','n','a','i','f'], array3 = ['1','2','3','4','5','6']; array2.forEach((hash => (a, i, aa) => { if (hash.has(a)) { aa[i] = array3[i]; } })(new Set(array1))); console.log(array2);
function replaceDuplicates(array1, array2, array3) {
// array3 can't be smaller than array1!
if (array3.length < array1.length) throw new Error('array3 < array1');
// Loop through all the items in array1...
for (var i = 0; i < array1.length; i++) {
// Check if the item in array2 matches...
if (i < array2.length && array2[i] === array1[i]) {
// And if it does replace array1's item with array3's item!
array1[i] = array3[i];
}
}
}
var array1 = ['a','b','c','d'];
var array2 = ['a','v','n','d','i','f'];
var array3 = ['1','2','3','4','5','6'];
replaceDuplicates(array1, array2, array3);
console.log(array1); // ['1','v','n','4','i','f']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.