最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

How to subtract one array of numbers from another, element-wise, in JavaScript - Stack Overflow

programmeradmin14浏览0评论

If I have an array A = [1, 4, 3, 2] and B = [0, 2, 1, 2], and 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?

If I have an array A = [1, 4, 3, 2] and B = [0, 2, 1, 2], and 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?

Share Improve this question edited Jul 9, 2024 at 21:48 ultrafez 5456 silver badges19 bronze badges asked Jul 27, 2017 at 5:35 rrbestrrbest 1,7893 gold badges14 silver badges23 bronze badges 5
  • 4 Possible duplicate of What is the fastest or most elegant way to compute a set difference using Javascript arrays? – jhpratt Commented Jul 27, 2017 at 5:37
  • 2 A user with your rep should know the importance of sharing effort in question. SO is to get help for your problems and not solution for your requirements – Rajesh Commented Jul 27, 2017 at 5:55
  • Try this., stackoverflow.com/questions/1187518/javascript-array-difference – Anand Commented Jul 27, 2017 at 6:21
  • Try this link: stackoverflow.com/questions/1187518/javascript-array-difference – Anand Commented Jul 27, 2017 at 6:23
  • 4 The caluclated values in the example are wrong. It should be [1,2,2,0] and not [0,2,2,0]. – Adrian Dymorz Commented Feb 21, 2020 at 19:29
Add a comment  | 

7 Answers 7

Reset to default 135

If you want to find the set difference between two sets, that is, you want all the elements of A that are not in B:

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

If you want arithmetic differences between the elements of A and the corresponding elements of B, then please look to the other posted answers.

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

const A = [1, 4, 3, 2]
const B = [0, 2, 1, 2]
const C = A.map((valueA, indexInA) => valueA - B[indexInA])
console.log(C) // [1, 2, 2, 0]

Here the map is returning the substraction operation for each number of the first array.

Note: this will not work if the arrays have different lengths

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

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

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.

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论