そのようなオブジェクトがある場合
var object = function(key,text)
{
this.key = key;
this.text = text;
}
そして、これらのオブジェクトの配列を作成します
var objArray = [];
objArray[0] = new object('key1','blank');
objArray[1] = new object('key2','exampletext');
objArray[2] = new object('key3','moretext');
配列内のすべてのオブジェクトのプロパティの1つだけを取得できる方法はありますか?例えば:
var keyArray = objArray["key"];
上記の例はset keyArrayを何にも返しませんが、次のような値に設定されることを望んでいました。
keyArray = [
'key1',
'key2',
'key3']
ObjArrayを繰り返し処理し、各キープロパティをキー配列に手動でコピーせずにこれを行う方法を知っている人はいますか?
これは Array.prototype.map() 関数で簡単に行えます:
var keyArray = objArray.map(function(item) { return item["key"]; });
これを頻繁に行う場合は、マップを抽象化する関数を作成できます。
function pluck(array, key) {
return array.map(function(item) { return item[key]; });
}
実際、Underscoreライブラリには pluck と呼ばれる組み込み関数があり、まさにそれを行います。
var object = function(key,text) {
this.key = key;
this.text = text;
}
var objArray = [];
objArray[0] = new object('key1','blank');
objArray[1] = new object('key2','exampletext');
objArray[2] = new object('key3','moretext');
var keys = objArray.map(function(o,i) {
return o.key;
});
console.log(keys); // ["key1", "key2", "key3"]
JS Binの例
古いブラウザは map をサポートしていない可能性がありますが、for
ループでこれを簡単に行うことができます。
var keys = [];
for (var i = 0; i < objArray.length; i++) {
keys.Push(objArray[i].key);
}
JS Binの例
このようなことをしたいと思うでしょう:
objArray.map(function (obj) { return obj.key; });
デモするJSFiddleを次に示します。 http://jsfiddle.net/Q7Cb3/
古いブラウザのサポートが必要な場合は、独自の方法を使用できます。
JSFiddleデモ: http://jsfiddle.net/Q7Cb3/1/
function map (arr, func) {
var i = arr.length;
arr = arr.slice();
while (i--) arr[i] = func(arr[i]);
return arr;
}
何かは、配列の要素を反復処理する必要があります。 .map()
を使用して、見栄えを良くすることができます。
var keys = objArray.map(function(o) { return o.key; });
特定のキーを取得する関数を生成する関数を作成できます。
function plucker(prop) {
return function(o) {
return o[prop];
};
}
次に:
var keys = objArray.map(plucker("key"));
本当に「objArray」は内部に3つのオブジェクトを持つ配列です。キーのリストが必要な場合は、これを試すことができます:
var keys = [];
for(a in objArray) {
keys.Push(objArray[a].key);
}
Varキーには3つのキーがあります。
お役に立てば幸いです! :)