web-dev-qa-db-ja.com

配列内のすべてのオブジェクトから特定のキーの値を取得する

ドロップダウンボックスにデータをフィードするAPIがいくつかあるexpress.jsアプリを実行しています。返されるデータの形式は次のとおりです。

  [
    {
        key: 'blah',
        value: 'Blah Blah'
    },
    {
        key: 'foo',
        value: 'Foos'
    },
    {
        key: 'bar',
        value: 'Bars'
    },
    {
        key: 'baz',
        value: 'Bazingo'
    }
];

ここで、keyは私のオプションキーで、valueは表示テキストです。この配列の構造は固定されており、配列内の各オブジェクトのフィールドとして常にキーと値を持っているという事実を知っています。

送信されたフォームを検証しようとすると(追加のサーバー側検証)、配列の「キー」のすべての値(blah、foo、bar、baz)に対してフィールドに提供された値を相互参照したいと思います。これが頻繁に使用されるルートになることを考えると、許可された値を見つけるために毎回配列を繰り返し処理することは避けたいと思います。これを行う簡単な方法はありますか?言い換えれば、私は私が使用できることを知っています:

 permittedValues = [];
 for (i = 0; i < array.length; i++){
    permittedValues[i] = array[i]["key"];
 }

しかし、可能であれば、このforループを回避したいと思います。

追伸:これは基本的な質問のようで、オンラインで見つけた答えは私の質問に正確に答えていませんでした。それで、これがすでに尋ねられて、答えられたならば、謝罪します。

14
user1452030

map

_permittedValues = array.map(function(value) {
  return value.key;
});
_

ES6/ES2015では、 矢印関数 でさらにきれいです:

_permittedValues = array.map(value => value.key);
_

きれいかもしれませんが、おそらくfor()ループよりも高速ではありません。

32
Rudie

Lodashを使用して、

Lodash 4.x以降、_。pluck関数は、マップ関数をサポートするために削除されました。

次の方法で目的のタスクを達成できます。

import _ from 'lodash'
_.map(items, 'key');

参照: Lodash _.pluckに何が起こったのですか?

5
Vraj Solanki

Javascriptの現在のバージョンでは、ループを行う必要があります。

ただし、npm `lodash 'のようなモジュールを使用して、見た目をシンプルにすることができます。

var _ = require('lodash')
var permittedValues = _.pluck(array, 'key')

pluckドキュメントへのリンク

0
Jerome WAGNER

マップを介して値を抽出し、それらを正規表現に形成して値を照合できます。

例: http://repl.it/X0V

var items=
[
    {
        key: 'blah',
        value: 'Blah Blah'
    },
    {
        key: 'foo',
        value: 'Foos'
    },
    {
        key: 'bar',
        value: 'Bars'
    },
    {
        key: 'baz',
        value: 'Bazingo'
    }
];

var toReg = items.map(function(obj){
    return obj.key; 
}).join('|');
var regex = new RegExp('^('+ toReg +')$');

//To test the regex
var itemsToTest = ['blah', 'Pies', 'foo', 'Bazingo'];
itemsToTest.forEach(function(key){
   if(regex.test(key)){
       console.log(key);
   }
});
0
Gabs00