对所有数组项使用数学abc。

3

数组 => 数学.abc


我的数组是:

var arr = [9 , -2 , -10 ,2 ,-21]

我希望使用math.abc从新的数组中获取9、2、10、2和21。我该怎么做呢?
这是我的代码:
var n = 5;
var inputs = [1, -2, -8, 4, 5];
for (var i = 0 ; i === n ; i++){
  Math.abs(inputs[i]);
  console.log(inputs[i]);
}

但我不知道为什么它不起作用 :(

咦,为什么发送问题这么难啊?:\


Math.abs(inputs[i]) 返回 绝对值,不会改变传入的值...所以你需要执行 inputs[i] = Math.abs(inputs[i]);。另外,由于 i 从 0 开始,所以它永远不会等于 5 ... for 循环根本不会运行。 - Jaromanda X
另外,我喜欢你开始时说:“我的数组是:var arr = [9 , -2 , -10 ,2 ,-21]”,而你的代码有var inputs = [1, -2, -8, 4, 5];...变量的名称和内容都不匹配——至少它们的长度是相同的。 - Jaromanda X
3个回答

1

正确的是Math.abs,而不是math.abc

通过Math.abs映射数组并记录它。

var arr = [9 , -2 , -10 ,2 ,-21];
console.log(
  arr.map(Math.abs)
);

原始值是不可变的。仅仅调用 Math.abs 并不会改变这个值 - 你需要将结果赋值给某个变量才能看到变化。

你的 for 循环条件也有问题,你从未定义过 n,而且条件应该在循环运行时为真: i < inputs.length,而不是 i === n


1
虽然这可能被认为是“更好的代码”,但它并没有展示出原帖中的错误 - 如果有一个要求改变arr(甚至不是重新分配到一个新数组,而是在原地改变),那该怎么办? - Jaromanda X
1
哈!我正在搜索互联网寻找这个未知的Math.abc方法/属性。 - Kinglish
@Kinglish - oops = 抱歉,我假设了(这只让我成为了一个傻瓜,而不是你 :p)- 我会删除我的错误 :p - Jaromanda X

0

实际上,你做得很好,但你应该关注代码中的两个点。

首先,你有一个循环来获取数组中的所有值。所以你应该从i=0开始,并在n-1的索引处获取最后一个值。

for循环有三个部分。第一部分是迭代值的定义,第二部分是条件,第三部分是你想在循环的每一步结束时执行的操作。它们用“;”分隔。在你的条件部分中,你只是说“当我的i值等于n(数组的长度)时继续前进”。

for(i=0;i===n;i++)

但你不应该这样做。因为只有当你的i等于n时才会起作用,所以在第一次迭代中就会通过,因为i=0且n=5,所以不相等。

你想获取所有值,因此要获取0到n-1索引处的值,因此,如果你的i小于n,请继续进行,但是如果你获取了所有值并且你的i等于或大于N,则停止。

所以

for(i=0;i<n;i++)

第二点是,你并没有使用 Math.abs 改变值,而只是将其打印出来了。你应该将 Math.abs 的值赋给旧值的索引。因此,
inputs[i] = Math.abs(inputs[i])

最后

var n = 5;
var inputs = [1, -2, -8, 4, 5];
for (var i = 0 ; i < n ; i++){
   inputs[i]=Math.abs(inputs[i]);      
}
console.log(inputs)


0

首先,您无需在单独的变量中指定数组长度。更灵活的方法是使用inputs.length

其次,在您的for循环中的条件是错误的-应该是i<n

第三,在调用Math.abs时不做任何事情。如果要改变原始数组,则可以按以下方式更新代码:

var inputs = [1, -2, -8, 4, 5];
for (var i = 0; i < inputs.length ; i++){
  inputs[i] = Math.abs(inputs[i]);
}
console.log(inputs);

如果您想创建一个包含绝对值的新数组,请使用 Array.prototype.map,如下所示:

var inputs = [1, -2, -8, 4, 5];
var absoluteValues = inputs.map(Math.abs);
console.log(absoluteValues);

如果您还不太清楚,可以使用更具描述性的代码:

var absoluteValues = inputs.map(function(number) {
    return Math.abs(number);
});

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