我如何通过使用过滤方法获得数组数据?



我想在JavaScript中使用innerstate键值过滤不匹配键值的diaryItems的数据,并将其放在answer常量中。

我使用了这样的代码,但是我没有得到想要的值。我如何修复代码?

这是我的代码

const innerstate = {
instar: 'egg',
feedType: 'feed',  
feedAmount: 0,              
inputfeedtime: 0,         
wormSize: 'third',            
inputamount: 0, 
}

const  diaryItems = 
[

{diaryItemId: 174, name: "instar"},
{diaryItemId: 175, name: "recordFeedPeriod"},
{diaryItemId: 176, name: "feedPeriod"},
{diaryItemId: 177, name: "feedAmount"},
{diaryItemId: 178, name: "feedType"},
{diaryItemId: 195, name: "totalFeedAmount"},
{diaryItemId: 196, name: "inputfeedtime"},
{diaryItemId: 197, name: "wormSize"},
{diaryItemId: 198, name: "inputamount"}

]

(expected answer)
const answer = [
{diaryItemId: 174, name: "instar"},
{diaryItemId: 178, name: "feedType"},
{diaryItemId: 177, name: "feedAmount"},
{diaryItemId: 196, name: "inputfeedtime"},
{diaryItemId: 197, name: "wormSize"},
{diaryItemId: 198, name: "inputamount"}
]

我试过这个代码,但是它不工作

const answer = diaryItems.filter((v) => v.name !== 
Object.keys(innerState))

你差一点。您需要检查键是否包含当前条目的名称,而不是检查是否与所有键相等:

const innerstate = {
instar: 'egg',
feedType: 'feed',  
feedAmount: 0,              
inputfeedtime: 0,         
wormSize: 'third',            
inputamount: 0, 
};
const diaryItems = [        
{diaryItemId: 174, name: "instar"},
{diaryItemId: 175, name: "recordFeedPeriod"},
{diaryItemId: 176, name: "feedPeriod"},
{diaryItemId: 177, name: "feedAmount"},
{diaryItemId: 178, name: "feedType"},
{diaryItemId: 195, name: "totalFeedAmount"},
{diaryItemId: 196, name: "inputfeedtime"},
{diaryItemId: 197, name: "wormSize"},
{diaryItemId: 198, name: "inputamount"}        
];
const keys = Object.keys(innerstate);
const result = diaryItems.filter(({name}) => keys.includes(name));
console.log(result);

您只需要检查名称是否在键数组

const answer = diaryItems.filter((v) =>
Object.keys(innerstate).includes(v.name)
)

最新更新