私の配列は次のようになります。
array = [object {id: 1, value: "itemname"}, object {id: 2, value: "itemname"}, ...]
すべてのオブジェクトは同じ属性を持ちますが、値は異なります。
その配列にWHEREステートメントを使用する簡単な方法はありますか?
Object.id = varのオブジェクトを取得します
または、配列全体をループしてすべての項目をチェックする必要がありますか?私の配列には100以上のエントリがあるので、より効率的な方法があるかどうか知りたい
Array.find
を使用:
let array = [
{ id: 1, value: "itemname" },
{ id: 2, value: "itemname" }
];
let item1 = array.find(i => i.id === 1);
MDNでのArray.find: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/find
let array = [
{ id: 1, value: "itemname" },
{ id: 2, value: "itemname" }
];
let item1 = array.filter(item => item.id === 1)[0];
let item2 = array.reduce((prev, current) => prev || current.id === 1 ? current : null);
console.log(item1); // Object {id: 1, value: "itemname"}
console.log(item2); // Object {id: 1, value: "itemname"}
( 遊び場のコード )
配列全体を繰り返し処理する場合は、 some を使用します。
let item;
array.some(i => {
if (i.id === 1) {
item = i;
return true;
}
return false;
});
( 遊び場のコード )
列を指定せずにオブジェクトのすべてのフィールドから値を検索する必要がある場合、TypeScriptを使用してオブジェクトの配列内の特定の値を動的に検索できます
var searchText = 'first';
let items = [
{ id: 1, name: "first", grade: "A" },
{ id: 2, name: "second", grade: "B" }
];
This below code will search for the value
var result = items.filter(item =>
Object.keys(item).some(k => item[k] != null &&
item[k].toString().toLowerCase()
.includes(searchText.toLowerCase()))
);
TypeScriptを使用して、angularjs 4で検索フィルターパイプを作成するために同じアプローチを使用できます。
配列をループする必要がありますが、各idをインデックスにリンクするハッシュマップを作成して保存する場合、一度だけ実行すればよいので、その後のオブジェクトを直接参照できます。
var idReference = myArray.reduce(function( map, record, index ) {
map[ record.id ] = index;
return map;
}, {});
var objectWithId5 = myArray[ idReference["5"] ];
ただし、これはすべてのIDが一意であることを前提としています。