如何在javascript中按元素从一个数组中减去另一个数组

e5njpo68  于 2023-02-28  发布在  Java
关注(0)|答案(7)|浏览(161)

如果我有一个数组A = [1, 4, 3, 2]B = [0, 2, 1, 2],我想返回一个新的数组(A - B),值为[1, 2, 2, 0],在javascript中最有效的方法是什么?

pvabu6sv

pvabu6sv1#

如果你想找出两个集合之间的 * 集合差 *,也就是说,你想找出A中所有不在B中的元素:

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

如果你想知道A的元素和B的相应元素之间的算术差,那么请看其他张贴的答案。

ijnw1ujt

ijnw1ujt2#

使用map方法map方法在其回调函数中接受三个参数,如下所示

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

mw3dktmi3#

For前所未有的简单高效。
查看此处: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);
doinxwow

doinxwow4#

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]

这里,map返回第一个数组中每个数字的减法运算。

**注意:**如果数组长度不同,则此操作无效

unhi4e5o

unhi4e5o5#

如果你想覆盖第一个表中的值,你可以简单地使用forEach方法来处理数组forEach。ForEach方法和map方法有相同的参数(element,index,array)。这和前面的答案类似,但这里我们不返回值,而是自己赋值。

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

mutmk8jj6#

使用ES6的一行程序,用于长度相等的数组:

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

v =数值,i =指数

x8diyxa7

x8diyxa77#

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

时间复杂度是O(n)你也可以把你的答案和一个大的数组集合进行比较。

相关问题