Compare two Arrays and replace Duplicates with val

2020-04-14 08:20发布

var array1 = ['a','b','c','d'];
var array2 = ['a','v','n','d','i','f'];

var array3 = ['1','2','3','4','5','6'];

Just starting to learn Javascript, I can't figure out how to compare the values of array2 to those on array1 and if so replace it with the corresponded array index from array3.

To turn it like this:

array2 = ['1','v','n','4','i','f'];

But also, it has to compare the values from array1 and array2 even if the index positions are different like this:

var array1 = ['a','b','c','d'];
var array2 = ['d','v','n','a','i','f'];

Thanks for the help

7条回答
萌系小妹纸
2楼-- · 2020-04-14 08:49

Use Array#map

array2.map((v, i) => v === array1[i] ? array3[i] : v);
查看更多
够拽才男人
3楼-- · 2020-04-14 08:52
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']
查看更多
Lonely孤独者°
4楼-- · 2020-04-14 08:55

You can use map() on array2 and see if current element is same as element in array1 with same index if it is return element from array3 with index of i else return current element or 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)

查看更多
再贱就再见
5楼-- · 2020-04-14 08:56

You could use a hash table and check against. If the string is not included in the hash table, a replacement value is set for this element.

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 with 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);

查看更多
Evening l夕情丶
6楼-- · 2020-04-14 08:57

there are many forms, this is a basic form:

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
查看更多
狗以群分
7楼-- · 2020-04-14 09:01

Here you have some code that does what you ask:

    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];
            }
        }

Hope it helps!

查看更多
登录 后发表回答