我想在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)
)