如何在JavaScript数组中否定所有元素

3
什么是在JavaScript数组中否定所有元素的最短方法,具有合理的效率?
例如,该解决方案将把[0, 18, -1, -2, 1, 3]转换为[0, -18, 1, 2, -1, -3]
该解决方案不需要处理任何NaN / undefined / null值,因为我需要此数组不包含任何这些值。
以下是我通常使用的方法(使用数组array):
for(var i = 0; i < array.length; i++) {
  array[i]*=-1
}

问题在于我需要在多个地方反转这个数组,所以不想重复使用大量的代码。
谢谢。

2
你尝试过什么?至少做出一次尝试并展示出来,而不是从零开始询问如何操作,这并不应该很困难。 - charlietfl
2个回答

6

这将是array.map返回每个值的负数。为了更短的语法,添加箭头函数。

var negatedArray = array.map(value => -value);

3
虽然这种方法得到了“-0”,但它还是不错的。 - choz
1
这不是更简单的 array.map(value => -value); 吗?正如 @AaronJanse 指出的那样,他不需要处理 null 或 undefined。 - mr rogers
1
@choz -0+0是不同的。否则,1/+01/-0也将是相同的。 - Oriol
1
@choz 不,1/+0+Infinity,而 1/-0-Infinity。显然 +Infinity !== -Infinity,例如 -Infinity < +Infinity。你还可以测试 Object.is(+0, -0),它会产生 false(它们是不同的)。 - Oriol
2
@Oriol,我们不要深入讨论.. +0 === -0 好的.. 这篇文章可能会有所帮助。 - choz
显示剩余5条评论

1
将JavaScript数组中的所有元素取反。我认为您指的是仅对正数取反。
var _myArray = [0, 18, -1, -2, 1, 3]
var _invArray = [];
_myArray.forEach(function(item){
  item >0 ?(_invArray.push(item*(-1))) :(_invArray.push(item))
})
console.log(_invArray);

JSFIDDLE

{{链接1:JSFIDDLE}}


不是,但是这是一个好的解决方案。如果这正是我所寻找的,_invArray.push(-Math.abs(item)) 也可以起作用。 - user31415

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接