ドロップダウンボックスにデータをフィードする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ループを回避したいと思います。
追伸:これは基本的な質問のようで、オンラインで見つけた答えは私の質問に正確に答えていませんでした。それで、これがすでに尋ねられて、答えられたならば、謝罪します。
Lodashを使用して、
Lodash 4.x以降、_。pluck関数は、マップ関数をサポートするために削除されました。
次の方法で目的のタスクを達成できます。
import _ from 'lodash'
_.map(items, 'key');
Javascriptの現在のバージョンでは、ループを行う必要があります。
ただし、npm `lodash 'のようなモジュールを使用して、見た目をシンプルにすることができます。
var _ = require('lodash')
var permittedValues = _.pluck(array, 'key')
マップを介して値を抽出し、それらを正規表現に形成して値を照合できます。
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);
}
});