在一些第三方库中,扩展了数组原型:
Array.prototype.repeat = function(value, length) {
while (length) this[--length] = value;
return this;
};代码:
var model = {
features:[1,2,3]
};
for (var p in model.features) {
console.log(p);
}预期:
1
2
3结果:
1
2
3
repeat我的代码如何正确地确定超出正常原型的属性并跳过它们?
发布于 2018-01-21 15:17:35
有许多方法可以在JavaScript中迭代数组。在选择一个时,您可能需要考虑以下几个方面
Array.prototype上的方法进行了优化,但它们仍然比循环的标准要慢)。从我自己的观察来看,我可以看出,Array.prototype.map()是开发人员使用转运机和函数式编程范例的更好选择。
为了回圈
for..in
虽然不建议使用for..in来迭代数组,但您可以使用Object.prototype.hasOwnProperty()进行迭代,如下所示。
for (const p in model.features) {
if (model.features.hasOwnProperty(p)) {
console.log(model.features[p]);
}
}结果在
1
2
3for..of
但是,您可以使用for...of代替,这将是在处理数组时推荐的。
for (const feature of model.features) {
console.log(feature);
}for
这是您最好的选择,如果您不使用转换程序,并希望确保您的代码工作在任何浏览器。
for(var i = 0; i < model.features.length; i++) {
console.log(model.features[i]);
}Array.prototype
在Array.prototype上也有内置的方法值得注意。
Array.prototype.forEach()
arr.forEach((value, index, array) => {
});Array.prototype.map()
arr.map((value, index, array) => {
});发布于 2018-01-21 15:14:26
给定所讨论的代码,可以使用for或for..of循环来迭代数组
发布于 2018-01-21 15:17:50
您需要检查.hasOwnProperty -> https://jsfiddle.net/xbdd6q13/2/这里的工作代码
或者你也可以用for..of代替for..in
for (var p of model.features) {
console.log(p);
}https://stackoverflow.com/questions/48368224
复制相似问题