簡體   English   中英

當至少一個對象的屬性與測試的屬性匹配時,如何遍歷對象數組並返回 true/false object

[英]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#entriesArray#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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM