web-dev-qa-db-ja.com

Javascriptのオブジェクトの配列から特定のプロパティのみを返す

そのようなオブジェクトがある場合

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を繰り返し処理し、各キープロパティをキー配列に手動でコピーせずにこれを行う方法を知っている人はいますか?

20
ragesalmon

これは 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 と呼ばれる組み込み関数があり、まさにそれを行います。

22
Jacob Krall
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の例

http://jsbin.com/vamey/1/edit

古いブラウザは map をサポートしていない可能性がありますが、forループでこれを簡単に行うことができます。

var keys = [];

for (var i = 0; i < objArray.length; i++) {
  keys.Push(objArray[i].key);
}

JS Binの例

http://jsbin.com/redis/1/edit

2
Miguel Mota

このようなことをしたいと思うでしょう:

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;
}
0
Robert Messerle

何かは、配列の要素を反復処理する必要があります。 .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"));
0
Pointy

本当に「objArray」は内部に3つのオブジェクトを持つ配列です。キーのリストが必要な場合は、これを試すことができます:

var keys = [];
for(a in objArray) {
    keys.Push(objArray[a].key);
}

Varキーには3つのキーがあります。

お役に立てば幸いです! :)

0
Rubén Guerrero