lb2020
lb2020

Reputation: 137

Javascript .includes method on an array within an object

I want to filter through an array and retrieve items if their filters match. However it does not work.

const wanted=["apple"]
const items = [
  {
    "name": "Iphone"
    "filters": ["phone","apple"]
  },
  {
    "name": "samsung12"
    "filters": ["samsung12","samsung"]
  },
]

let desiredList = items.filter((val) => wanted.includes(val.filters));

Any ideas on how i could get this to work?

Upvotes: 0

Views: 53

Answers (3)

Burham B. Soliman
Burham B. Soliman

Reputation: 1562

simply you need to filter your items searching the required field, then map the result using .map for each result

here you can check it

let abc = document.querySelectorAll('div')

const wanted=["apple"]
const items = [{
  "name": "Iphone",
  "filters": ["phone","apple"]
},{
  "name": "Iphone",
  "filters": ["phone","sony"]
},{
  "name": "Iphone",
  "filters": ["phone","samsung"]
}]

items.filter((val) => val["filters"].includes(wanted[0])).map((item) => { item? abc[0].innerHTML += item.name+"<br />"+item.filters : console.log("none") })
<div></div>

Upvotes: 1

Ahmed Sbai
Ahmed Sbai

Reputation: 16189

const wanted="apple"
const items = [
"name": "Iphone"
"filters": ["phone","apple"]
]

let desiredList = 
items.filter((val)=> 
val.filters.includes(wanted) )

Upvotes: 1

tenshi
tenshi

Reputation: 26324

You would need to use some to check if any of the filters contains a value in wanted:

const wanted = ["apple"]
const items = [{
  "name": "Iphone",
  "filters": ["phone", "apple"]
}, {
  "name": "samsung12",
  "filters": ["samsung12", "samsung"]
}];

let desiredList = items.filter((item) => item.filters.some((f) => wanted.includes(f)));

console.log(desiredList);

Upvotes: 2

Related Questions