我想要实现的目标是:
[1,2,3].power(2) === [1,4,9];
到目前为止,我做到了:
Array.prototype.power = function(value) {
for (var i = 1; i < this.length; i++) {
this[i] = Math.pow(this[i], value);
}
}
但由于某种原因,它返回false
,数组看起来像:
[1, 4, 9, power: function...]
我在这里做错了什么?
答案 0 :(得分:0)
您需要返回数组:
Array.prototype.power = function(value) {
for (var i = 0; i < this.length; i++) {
this[i] = Math.pow(this[i], value);
}
return this;
}
var powers = [1,2,3].power(2); // [1, 4, 9]
现在进一步深入,在查看数组时,您可能会看到power
方法作为数组的一部分列出。这是problems with prototyping the Array之一。
这并不意味着不应该完成数组原型设计。但是要理解,作为一个数组,只要你使用Array方法来查询/迭代它,它仍然会像一个数组一样。
例如,采用上面的代码示例,我仍然可以获得正确的数组长度:
powers.length; // 3
powers.toString() // 1,4,9
如果我用索引号迭代它,我可以得到一个准确的读数:
for(var i = 0; i < powers.length; i++){
console.log(powers[i]);
}
// 1
// 4
// 9
非常简单:[1, 4, 9]
绝对是使用上述power
方法时返回的Array元素。
答案 1 :(得分:0)
如前所述,您无法直接比较数组。但是,您可以编写一个简单的方法来查看值是否匹配:
var arr = [1, 2, 3];
var arr2 = [1, 4, 9];
Array.prototype.power = function(value) {
for (var i = 0; i < this.length; i++) {
this[i] = Math.pow(this[i], value);
}
return this;
}
Array.prototype.compare = function(value) {
if (this.length !== value.length) {
return false
}
for (var i = 0; i < this.length; i++) {
if (this[i] !== value[i]) {
return false;
}
}
return true;
}
var convertedArray = [1, 2, 3].power(2);
var isEqual = convertedArray.compare(arr2);
注意:这假定数组的长度相同。您可以添加自己的错误处理,直到它们不存在。