如何实现此代码?
Array.prototype.multiply = function() {
return this.map(function(item){return item * item})
}
a.multiply();
console.log(a); //[1, 4, 9, 16, 25]
我正在考虑使用以下代码,但它仅返回未追加到数组的乘积。有人可以帮忙吗?
<packaging>jar</packaging>
答案 0 :(得分:2)
您可以将映射项推送到this
。
Array.prototype.multiply = function () {
this.push(...this.map(v => v * v)); // push spreaded values
return this; // allow fluent interface
};
var a = [1, 2, 3, 4, 5];
a.multiply();
console.log(a);
答案 1 :(得分:1)
请问我为什么要对数组进行突变?您可以使用仅返回所需结果的函数来装饰Array原型。更改输入/状态具有其disadvantages。
一种不变异数组的方法如下:
Array.prototype.multiplyAll = function() {
return this.reduce((r,c) => r * c)
}
Array.prototype.multiplyEach = function() {
return this.map(x => x * x)
}
var a = [1, 2, 3, 4, 5];
console.log(a.multiplyAll());
console.log(a.multiplyEach());
通常,推荐的方法是not to decorate the prototypes的内置对象,但要使用utility
的纯函数。
答案 2 :(得分:0)
您可以如下使用“ Array.concat”和“ Array.map”
const a = [1, 2, 3, 4, 5];
// for direct method
function multiply() {
return a.concat(a.map(d => d * d))
}
console.log(multiply(a));
// for prototype method
Array.prototype.multiply = function() {
Object.assign(this, this.concat(this.map(d => d * d)))
}
a.multiply()
console.log(a)
答案 3 :(得分:0)
如果您要按照ES6规范进行编码,则可以将spread syntax与Array.prototype.map
方法结合使用来实现此目的。我认为该方法更有意义,因此将其重命名为pushSquared
。
Array.prototype.pushSquared = function() {
Object.assign(this, [...this, ...this.map(n => n * n)]);
}
var a = [1, 2, 3, 4, 5];
a.pushSquared()
console.log(a);