Answers:
如果您可以在本地使用ES6或与Babel(js编译器)一起使用,则可以执行以下操作:
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循环也枚举原型链中的属性)。
希望能帮助到你!=)
Object.entries
通话而变慢。我没有进行任何测试。
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
是不是方法(好像target
是array
,你会得到很多的方法提醒,如indexOf
,push
,pop
,等。)
Object.keys
。Object.keys(target).forEach(function (key) { target[key]; });
。
target
使用创建的Object.create(null)
,将无法正常工作,则应更改代码target.hasOwnProperty(k)
->Object.prototype.hasOwnProperty.call(target,k)
k
,target
和property
?对我来说,非javascripter这个未定义的区域是:)
没有人提到过,Object.keys
所以我会提及。
Object.keys(obj).forEach(function (key) {
// do something with obj[key]
});
for of
tc39wiki.calculist.org/es6/for-of
我假设您知道这i
是关键,并且可以通过data[i]
(只需一个快捷方式)获取值。
ECMAScript5 为数组引入了forEach
[MDN](似乎您有一个数组):
data.forEach(function(value, index) {
});
MDN文档为不支持该功能的浏览器提供了填充程序。
当然,这不适用于对象,但是您可以为它们创建类似的功能:
function forEach(object, callback) {
for(var prop in object) {
if(object.hasOwnProperty(prop)) {
callback(prop, object[prop]);
}
}
}
由于您将问题标记为 jQuery的,jQuery提供了$.each
[docs],它可以遍历数组和对象结构。
for each
语法的非标准扩展名。for each (let val in myObj) console.log(val);
。
ES6将提供Map.prototype.forEach(callback),可以像这样使用
myMap.forEach(function(value, key, myMap) {
// Do something
});
myMap
是什么?
let test = {a: 1, b: 2, c: 3};
Object.entries(test).forEach(([key, value]) => console.log(key, value))
// a 1
// b 2
// c 3
[['a', 1],['b',2],['c',3]]
。在forEach
解构每个键/值阵列,并设置两个变量key
和value
,只要你想的在功能上使用-在这里输出console.log
。
下面是一个尽可能接近您的示例。
for(var key in data){
var value = data[key];
//your processing here
}
如果您使用的是jQuery,请访问:http : //api.jquery.com/jQuery.each/
如果您正在使用Lodash,则可以使用_.forEach
_.forEach({ 'a': 1, 'b': 2 }, function(value, key) {
console.log(key + ": " + value);
});
// => Logs 'a: 1' then 'b: 2' (iteration order is not guaranteed).
提出此问题以来的最近几年,Javascript添加了一些新功能。其中之一是Object.Entries方法。
直接从MDN复制的是以下代码段
const object1 = {
a: 'somestring',
b: 42
};
for (let [key, value] of Object.entries(object1)) {
console.log(`${key}: ${value}`);
}
是的,您也可以在javascript中使用关联数组:
var obj =
{
name:'some name',
otherProperty:'prop value',
date: new Date()
};
for(i in obj)
{
var propVal = obj[i]; // i is the key, and obj[i] is the value ...
}
var global = (function() {
return this;
})();
// Pair object, similar to Python
function Pair(key, value) {
this.key = key;
this.value = value;
this.toString = function() {
return "(" + key + ", " + value + ")";
};
}
/**
* as function
* @param {String} dataName A String holding the name of your pairs list.
* @return {Array:Pair} The data list filled
* with all pair objects.
*/
Object.prototype.as = function(dataName) {
var value, key, data;
global[dataName] = data = [];
for (key in this) {
if (this.hasOwnProperty(key)) {
value = this[key];
(function() {
var k = key,
v = value;
data.push(new Pair(k, v));
})();
}
}
return data;
};
var d = {
'one': 1,
'two': 2
};
// Loop on your (key, list) pairs in this way
for (var i = 0, max = d.as("data").length; i < max; i += 1) {
key = data[i].key;
value = data[i].value;
console.log("key: " + key + ", value: " + value);
}
// delete data when u've finished with it.
delete data;