回答:
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
?私にとって、JavaScript以外のこの未定義の領域:)
誰も言及していObject.keys
ないので、私はそれに言及します。
Object.keys(obj).forEach(function (key) {
// do something with obj[key]
});
for of
tc39wiki.calculist.org
私はあなたがそれ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
[ドキュメント]を提供します。
for each
構文を許可する非標準の拡張機能があります。for each (let val in myObj) console.log(val);
。
そのfor..in
ために使用できます。
for (var key in data)
{
var value = data[key];
}
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
キー/値のアレイの各々を解体しての2つの変数を設定key
し、value
ここで出力-あなたが関数内で必要として使用されるように、console.log
。
使用している場合は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はいくつかの新機能を追加しました。その1つが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;