如何在Javascript中循环键入/值对象?

Bla*_*man 127 javascript iteration loops for-loop key-value

var user = {};
Run Code Online (Sandbox Code Playgroud)

现在我想创建一个setUsers()接受键/值对对象并初始化user变量的方法.

setUsers = function(data) {     
   // loop and init user    
}
Run Code Online (Sandbox Code Playgroud)

数据如下:

234: "john", 23421: "smith", ....
Run Code Online (Sandbox Code Playgroud)

Tim*_*own 187

注意从对象原型继承的属性(如果您在页面上包含任何库,可能会发生这种情况,例如旧版本的Prototype).您可以使用对象的hasOwnProperty()方法来检查这一点.使用for...in循环时这通常是一个好主意:

var user = {};

function setUsers(data) {
    for (var k in data) {
        if (data.hasOwnProperty(k)) {
           user[k] = data[k];
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 反正有没有for循环吗?我担心通过大键值对速度(我知道Crockford不是使用JSLint的粉丝,但我不确定他的推理).是否有理由担心这些事情? (3认同)
  • @streetlight:这取决于环境.如果您可以依赖ECMAScript 5(所有现代浏览器都可以,和Node.js一样),您可以选择[`Object.keys()`](https://developer.mozilla.org/en-US/文档/ JavaScript的/参考/ Global_Objects /对象/键).例如,如果您需要支持IE <= 8,那么您将坚持使用`for ... in`. (2认同)

Fel*_*lix 79

for (var key in data) {
    alert("User " + data[key] + " is #" + key); // "User john is #234"
}
Run Code Online (Sandbox Code Playgroud)


Bia*_*cki 13

像这样的东西:

setUsers = function (data) {
    for (k in data) {
        user[k] = data[k];
    }
}
Run Code Online (Sandbox Code Playgroud)