简体   繁体   中英

How to subtract one array from another, element-wise, in javascript

If i have an array A = [1, 4, 3, 2] and B = [0, 2, 1, 2] I want to return a new array (A - B) with values [1, 2, 2, 0] . What is the most efficient approach to do this in javascript?

 const A = [1, 4, 3, 2] const B = [0, 2, 1, 2] console.log(A.filter(n => !B.includes(n)))

Use map method The map method takes three parameters in it's callback function like below

currentValue, index, array

 var a = [1, 4, 3, 2], b = [0, 2, 1, 2] var x = a.map(function(item, index) { // In this case item correspond to currentValue of array a, // using index to get value from array b return item - b[index]; }) console.log(x);

For Simple and efficient ever.

Check here : JsPref - For Vs Map Vs forEach

 var a = [1, 4, 3, 2], b = [0, 2, 1, 2], x = []; for(var i = 0;i<=b.length-1;i++) x.push(a[i] - b[i]); console.log(x);

If you want to override values in the first table you can simply use forEach method for arrays forEach . ForEach method takes the same parameter as map method (element, index, array). It's similar with the previous answer with map keyword but here we are not returning the value but assign value by own.

 var a = [1, 4, 3, 2], b = [0, 2, 1, 2] a.forEach(function(item, index, arr) { // item - current value in the loop // index - index for this value in the array // arr - reference to analyzed array arr[index] = item - b[index]; }) //in this case we override values in first array console.log(a);

One-liner using ES6 for the array's of equal size in length:

 let subResult = a.map((v, i) => v - b[i]); // [1, 2, 2, 0] 

v = value, i = index

const A = [1, 4, 3, 2]
const B = [0, 2, 1, 2]
const C = A.map((valueA, indexA) => valueA - B[indexA])
console.log(C)
function subtract(operand1 = [], operand2 = []) {
console.log('array1', operand1, 'array2', operand2);
const obj1 = {};

if (operand1.length === operand2.length) {
    return operand1.map(($op, i) => {
        return $op - operand2[i];
    })
}
throw new Error('collections are of different lengths');
}

// Test by generating a random array
function getRandomArray(total){
const pool = []
for (let i = 0; i < total; i++) {
    pool.push(Math.floor(Math.random() * total));
}

return pool;
}
console.log(subtract(getRandomArray(10), getRandomArray(10)))

Time Complexity is O(n) You can also compare your answer with a big collection of arrays.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM