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

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

Answers:

Answer

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

Answer

Use Array.prototype.reduce to check the duplicates and create a new array - see demo below:

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

Answer

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)

Answer

Use Array#map

array2.map((v, i) => v === array1[i] ? array3[i] : v);
Answer

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
Answer

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!

Answer
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']

Tags

Recent Questions

Top Questions

Home Tags Terms of Service Privacy Policy DMCA Contact Us Javascript

©2020 All rights reserved.