[英]Javascript | Set all values of an array
代码
var cool = new Array(3);
cool[setAll] = 42; //cool[setAll] is just a pseudo selector..
alert(cool);
结果
一条警告消息:
42,42,42
如何将数组的所有值更改/设置为特定值?
没有内置方法,您必须遍历所有方法:
function setAll(a, v) {
var i, n = a.length;
for (i = 0; i < n; ++i) {
a[i] = v;
}
}
http://jsfiddle.net/alnitak/xG88A/
如果你真的想要,这样做:
Array.prototype.setAll = function(v) {
var i, n = this.length;
for (i = 0; i < n; ++i) {
this[i] = v;
}
};
然后你实际上可以做cool.setAll(42)
(参见http://jsfiddle.net/alnitak/ee3hb/ )。
不过,有些人不赞成扩展内置类型的原型。
EDIT ES5 引入了一种方法来安全地扩展Object.prototype
和Array.prototype
而不会中断for... in...
枚举:
Object.defineProperty(Array.prototype, 'setAll', {
value: function(v) {
...
}
});
编辑 2在 ES6 草案中,现在还有Array.prototype.fill
,用法cool.fill(42)
ES6 方法非常干净。 所以首先你初始化一个 x 长度的数组,然后调用它的fill
方法。
let arr = new Array(3).fill(9)
这将创建一个包含 3 个元素的数组,例如:
[9, 9, 9]
map
是这个问题最合乎逻辑的解决方案。
let xs = [1, 2, 3];
xs = xs.map(x => 42);
xs // -> [42, 42, 42]
但是,如果数组有可能是稀疏的,则需要使用for
或者更好的是for.. of
。
看:
现在是 2019 年,你应该使用这个:
let arr = [...Array(20)].fill(10)
所以基本上20
是length
或新的实例化Array
。
实际上,您可以使用这种完美的方法:
let arr = Array.apply(null, Array(5)).map(() => 0);
// [0, 0, 0, 0, 0]
此代码将创建数组并用零填充它。 要不就:
let arr = new Array(5).fill(0)
使用for
循环并依次设置每个循环。
其他答案是好的,但while循环似乎更合适:
function setAll(array, value) {
var i = array.length;
while (i--) {
array[i] = value;
}
}
更有创意的版本:
function replaceAll(array, value) {
var re = new RegExp(value, 'g');
return new Array(++array.length).toString().replace(/,/g, value).match(re);
}
但可能并非在任何地方都有效。 :-)
在使用 Epicycles 时发现了这一点 - 显然有效 - 我的眼睛看不到“p”。
/** Convert a set of picture points to a set of Cartesian coordinates */
function toCartesian(points, scale) {
const x_max = Math.max(...points.map(p=>p[0])),
y_max = Math.max(...points.map(p=>p[1])),
x_min = Math.min(...points.map(p=>p[0])),
y_min = Math.min(...points.map(p=>p[1])),
signed_x_max = Math.floor((x_max - x_min + 1) / 2),
signed_y_max = Math.floor((y_max - y_min + 1) / 2);
return points.map(p=>
[ -scale * (signed_x_max - p[0] + x_min),
scale * (signed_y_max - p[1] + y_min) ] );
}
您可以使用空语句。
const arr = [1, 2,3]; for (let i = 0; i < arr.length; arr[i++] = 42); console.log(arr);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.