Object.keys
ため、戻り配列し、インデックスとして配列を使用する場合、それは文字列に変換されます。配列内に単一の要素がある場合、文字列出力はその要素のtoString値と等しくなります。
しかし、これは良い解決策ではありません。あなたの基準が単一のキーを持っている場合にのみ機能します。
は、以下の理由を参照してください:だから
function findWhere(array, criteria) {
return array.find(function(el) {
return el[Object.keys(criteria)] === criteria[Object.keys(criteria)];
});
}
var ladders = [{ id: 1, height: 8 }, { id: 2, height: 10 }, { id: 3, height: 20 }, { id: 4, height: 25 }, { id: 5, height: 30 }, { id: 6, height: 40 }];
console.log(findWhere(ladders, { id: 2})); // this line works right
console.log(findWhere(ladders, { id: 2, height:10 })); // this line will result invalid
を、期待findメソッドは、1以下のようにする必要があります:
function findWhere(array, criteria) {
return array.find(el =>
Object.keys(criteria)
.every(key => criteria[key] === el[key])
);
}
var ladders = [{ id: 1, height: 8 }, { id: 2, height: 10 }, { id: 3, height: 20 }, { id: 4, height: 25 }, { id: 5, height: 30 }, { id: 6, height: 40 }];
console.log(findWhere(ladders, { id: 2})); // this line works right
console.log(findWhere(ladders, { id: 2, height:3 })); // this line works right too (undefined expected)
console.log(findWhere(ladders, { id: 2, height:10 })); // this line works right too (id:2 expected)
console.log(findWhere(ladders, { height:25 })); // this line works right too (id:4 expected)
.as-console-wrapper{
min-height:100%;
max-height:100%;
top:0;
}
どのように 'ladders' 〜に関係する'findWhere'? 'array'として渡された場合、' criteria'値は何ですか? – RomanPerekhrest
'Object.keys()'(配列を返す)がインデックスとしてどのように使われるのかわかりません。 – haim770
配列にインデックスを付けるためのキーとして使用されます(ここに示すように可能です)(http:// stackoverflow。com/a/10174080/3492895)、配列や何かを '.toString()'するだけのようです。私たちがもう少し文脈を持っていればなぜそれが役に立つのか理解しようとする方が簡単でしょう。 – Winestone