Comment puis-je obtenir des données Array en utilisant la méthode de filtrage ?
utilisateur15322469
Je souhaite filtrer les données de diaryItems qui ne correspondent pas à la valeur de la clé à l'aide de la valeur de la clé d'état interne en JavaScript et les placer dans la constante de réponse.
J'ai utilisé le code comme celui-ci, mais je n'ai pas obtenu la valeur souhaitée. Comment corriger le code ?
c'est mon code
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"}
]
j'ai essayé ce code mais ça marche pas
const answer = diaryItems.filter((v) => v.name !==
Object.keys(innerState))
Cerbrus
Tu étais proche. Vous devez vérifier si les clés contiennent le nom de l'entrée actuelle, au lieu de vérifier l'égalité de toutes les clés :
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);