JavaScript 中的 For..In 循环 - 键值对

IT技术 javascript foreach
2021-02-13 13:32:12

我想知道是否有办法foreach在 JavaScript 中执行类似 PHP循环的操作。我正在寻找的功能类似于这个 PHP Snippet:

foreach($data as $key => $value) { }

我正在查看 JSfor..in循环,但似乎无法指定as. 如果我使用“正常”for 循环 ( for(var i = 0; i < data.length; i++)执行此操作,有没有办法获取键 => 值对?

6个回答
for (var k in target){
    if (target.hasOwnProperty(k)) {
         alert("Key is " + k + ", value is " + target[k]);
    }
}

hasOwnProperty用于检查您是否target真的拥有该属性,而不是从其原型中继承它。更简单一点的是:

for (var k in target){
    if (typeof target[k] !== 'function') {
         alert("Key is " + k + ", value is" + target[k]);
    }
}

它仅仅检查k是不是方法(好像targetarray,你会得到很多的方法提醒,如indexOfpushpop,等。)

如果target使用创建将不起作用Object.create(null),应更改代码target.hasOwnProperty(k)->Object.prototype.hasOwnProperty.call(target,k)
2021-03-17 13:32:12
为什么不使用问题示例中给出的变量?这是什么ktarget还有property对我来说,非javascripter这个未定义的区域:)
2021-03-17 13:32:12
另一种仅迭代“自己的”属性的方法是Object.keys. Object.keys(target).forEach(function (key) { target[key]; });.
2021-03-29 13:32:12
Object.keys(target).forEach((key) => { target[key]; }); 对于角
2021-04-07 13:32:12

如果您可以在本机或Babel(js 编译器)中使用ES6那么您可以执行以下操作:

const test = {a: 1, b: 2, c: 3};

for (const [key, value] of Object.entries(test)) {
  console.log(key, value);
}

这将打印出此输出:

a 1
b 2
c 3

Object.entries()方法返回给定对象自己的可枚举属性[key, value]的数组,其顺序与for...in循环提供的顺序相同(区别在于 for-in 循环也枚举原型链中的属性)

希望能帮助到你!=)

您可能想检查这个问题:stackoverflow.com/questions/47213651/...这似乎表明推荐使用这种类型的语法: Object.keys(myObject).forEach(key => {...
2021-03-20 13:32:12
这是手头问题的最佳答案,该问题询问在 for 循环中同时获取键和值。
2021-03-30 13:32:12
应更新接受的答案,因为这实际上回答了问题,尽管在提出问题时不可用。
2021-04-02 13:32:12
这很完美,只是想知道 - 与“在对象中输入键,然后通过对象[键]获取值”相比,哪个性能更好?
2021-04-08 13:32:12
在这种特定情况下,我会认为它会因为Object.entries调用而变慢我没有运行任何测试。
2021-04-10 13:32:12

没有人提到,Object.keys所以我会提到它。

Object.keys(obj).forEach(function (key) {
   // do something with obj[key]
});
值得注意的是,“除了抛出异常之外,没有办法停止或中断 forEach() 循环”
2021-03-15 13:32:12
此时您应该使用 ES5 垫片。如果你生活在美好的 ES6 未来,请使用for of tc39wiki.calculist.org/es6/for-of
2021-03-20 13:32:12
Object.keys(obj).forEach((key) => { }); 对于角
2021-03-24 13:32:12
它不适用于 ES6 或者我不明白。Felix 在下面有一个更好、更易读的答案: data.forEach(function(value, index) { console.log(index); // 0 , 1, 2... });
2021-04-09 13:32:12
注意:IE8 及以下不支持。
2021-04-11 13:32:12

因为...in会为你工作。

for( var key in obj ) {
  var value = obj[key];
}

在现代 JavaScript 中,您还可以这样做:

for ( const [key,value] of Object.entries( obj ) ) {

}
var obj = {...};
for (var key in obj) {
    var value = obj[key];

}

php 语法只是糖。

这也将迭代所有继承的属性。为避免这种情况,请使用 .hasOwnProperty()。
2021-03-16 13:32:12