[英]How can loop over an array of objects and return true/false when at least one of the object's properties matches the properties of a test object
我有一個看起來像這樣的數組
let arrayExample =
[
{
"size":"6M",
"color":"Blue"
}
,
{
"size":"2M",
"color":"Yellow"
}
]
目前,要返回特定顏色或特定大小的所有元素,我使用這種方法
var allColors= arrayExample.map(i=>i.color)
return [{"color":"Blue"}].some((val)=> allColors.includes(val.color))
我的問題是,每當我找到一個具有我想要的精確組合的元素時,如何返回一個真值
如https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some
如果回調 function 為數組中的至少一個元素返回真值,則返回值 true。 否則,假的。
我目前的做法是
var allColors= arrayExample.map(i=>i.color)
var allSizes= arrayExample.map(i=>i.size)
return [{"color":"Blue","size":"2M"}].some((val)=> allColors.includes(val.color) && allSizes.includes(val.size)
這種方法對我的目的不起作用,知道即使我的arrayExample
中沒有項目與組合[{"color":"Blue","size":"2M"}]
,它仍然會返回true
因為我數組第二項的 2M 大小
這是一個 Jsfiddle 來測試我的情況https://jsfiddle.net/8htjpyb9/1/
如果你走到這一步,我要感謝你,也感謝你提供的所有幫助,希望你今天過得愉快
*編輯 -> 我想強調的是,由於嵌入了這種情況的代碼的 rest,過濾器不適用於我的問題。
我只對在找到完全匹配時返回 true 值感興趣。
Array#map
遍歷數組Array#some
檢查是否有任何combinations
與當前 object 匹配。Object#entries
和Array#every
來檢查與當前 object 匹配的屬性組合。 const array = [ { id: 1, size: '6M', color: 'Blue' }, { ld: 2, size: '2M', color: 'Yellow' }, { id: 3, size: '6M', color: 'Blue' } ]; const combinations = [ { "color": "Blue", "size": "6M" } ]; const matches = array.map(current => combinations.some(combination => Object.entries(combination).every(([key, value]) => current[key] === value ) ) ); console.log(matches);
如果我沒理解錯你在找這個?
const getItem = (arr, toFind) => { const {size, color} = toFind; return arr.filter(item => item.color === color && item.size === size).length > 0 }; let arrayExample = [{ "size": "6M", "color": "Blue", "material": "plastic" }, { "size": "2M", "color": "Yellow", "material": "leather" } ] const res = getItem(arrayExample,{"size": "6M","color": "Blue"}) console.log(res)
如果您想返回對象,匹配filter
將是一種更簡單的方法。 傳入一組數據,將測試 object 傳遞給 function,並僅返回與測試 object 具有相同大小和顏色值的那些 object。
const data=[{id: 1,size:'6M',color:'Blue'},{ld:2,size:'2M',color:'Yellow'},{id:3,size:'6M',color:'Blue'}]; const test = { size: '6M', color: 'Blue' }; function getExact(data, test) { return data.filter(obj => { return ( obj.size === test.size && obj.color === test.color ); }); } console.log(getExact(data, test));
如果您只想在數組 object 的屬性與測試 object 的屬性匹配時返回true/false
,那么some
是更好的選擇。
const data=[{id: 1,size:'6M',color:'Blue'},{ld:2,size:'2M',color:'Yellow'},{id:3,size:'6M',color:'Blue'}]; const test = { size: '6M', color: 'Blue' }; const test2 = { size: '5M', color: 'Green' }; function getExact(data, test) { return data.some(obj => { return ( obj.size === test.size && obj.color === test.color ); }); } console.log(getExact(data, test)); console.log(getExact(data, test2));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.