数组项相乘

时间:2018-11-16 19:55:52

标签: javascript arrays

如何实现此代码?

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>

4 个答案:

答案 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 syntaxArray.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);