поиск значений в указанном c имени в объекте - PullRequest
0 голосов
/ 11 марта 2020

Как получить конкретное значение c от объекта, вот мой пример объекта и псевдокод, чтобы получить ожидаемый результат:

items = [
    {code: "1", fruits: "APPLE", color: "red"},
    {code: "2", fruits: "BANANA", color: "dummy"},
    {code: "3", fruits: "BANANA", color: "anotherDummy"},
    {code: "4", fruits: "ORANGE", color: "orange"}
]


items.find("BANANA")

если мне нужно l oop оно или есть функция, которая может легко найти значения.
Ожидаемый результат:

2,"BANANA","yellow"
3,"BANANA","anotherDummy"

Ответы [ 8 ]

2 голосов
/ 11 марта 2020

Вы можете filter из массива

const items = [
  {code: "1", fruits: "APPLE", color: "red"},
  {code: "2", fruits: "BANANA", color: "dummy"},
  {code: "3", fruits: "BANANA", color: "anotherDummy"},
  {code: "4", fruits: "ORANGE", color: "orange"}
];

const keyword = 'BANANA';

const filter = items.filter(item => (item.code === keyword || item.fruits === keyword ||item.color === keyword));

console.log(filter);

Также для нескольких фильтров / поиска

const items = [
  {code: "1", fruits: "APPLE", color: "red"},
  {code: "2", fruits: "BANANA", color: "dummy"},
  {code: "3", fruits: "BANANA", color: "anotherDummy"},
  {code: "4", fruits: "ORANGE", color: "orange"}
];

const keyword = ['APPLE', 'BANANA'];

const filter = items.filter(item => (
  keyword.includes(item.code)
  || keyword.includes(item.fruits)
  || keyword.includes(item.color)
));

console.log(filter);
1 голос
/ 11 марта 2020

Надеюсь, что это может помочь -

  • этот код вернет массив с найденными элементами
  • , он сравнит значение, данное для всех свойств / ключей каждого элемента.
  • Кроме того, лучше создавать пользовательские (созданные функции findCustom ()), а не переопределять встроенный метод find ().

   var items = [{code: "1", fruits: "APPLE", color: "red"},
    {code: "2", fruits: "BANANA", color: "dummy"},
    {code: "3", fruits: "BANANA", color: "anotherDummy"},
    {code: "4", fruits: "ORANGE", color: "orange"}]
    
    items.findCustom = (value) =>{
    	let results = [];
    	items.find((item) => {
    	var listKeys = Object.keys(item);
    	listKeys.forEach((keyName) => {
    		if(item[keyName] == value) 
    			results.push(item);
    		
    })
    })
    return results;
    }
    console.log(items.findCustom("BANANA")) 
0 голосов
/ 11 марта 2020

Если вы планируете выполнять множественный поиск по массиву, лучше сначала создать Map.

items = [{ code: "1", fruits: "APPLE", color: "red" },
{ code: "2", fruits: "BANANA", color: "dummy" },
{ code: "3", fruits: "BANANA", color: "anotherDummy" },
{ code: "4", fruits: "ORANGE", color: "orange" }]

let itemsMap = items.reduce((acc, curr) => acc.set(curr.fruits, [curr, ...acc.get(curr.fruits) || []]), new Map());
console.log(itemsMap.get("BANANA"))
console.log(itemsMap.get("ORANGE"))

let multi = ['BANANA', 'ORANGE'].map(e => itemsMap.get(e)).flat();
console.log(multi)
0 голосов
/ 11 марта 2020
items = [
  {code: "1", fruits: "APPLE", color: "red"},
  {code: "2", fruits: "BANANA", color: "dummy"},
  {code: "3", fruits: "BANANA", color: "anotherDummy"},
  {code: "4", fruits: "ORANGE", color: "orange"}
]

let results = items.filter(o => o.fruits ==='BANANA')

results.forEach(function(item) {
  console.log(`${item.code}, ${item.fruits}, ${item.color}`)
})
0 голосов
/ 11 марта 2020

Фильтр массива может использоваться для фильтрации элементов

var items = [{
    code: "1",
    fruits: "APPLE",
    color: "red"
  },
  {
    code: "2",
    fruits: "BANANA",
    color: "dummy"
  },
  {
    code: "3",
    fruits: "BANANA",
    color: "anotherDummy"
  },
  {
    code: "4",
    fruits: "ORANGE",
    color: "orange"
  }
];

var items2 = items.filter(function(hero) {
  return hero.fruits == "BANANA";
});
0 голосов
/ 11 марта 2020

Пожалуйста, найдите решение. Надеюсь, это поможет!

const items = [{code: "1", fruits: "APPLE", color: "red"},
{code: "2", fruits: "BANANA", color: "dummy"},
{code: "3", fruits: "BANANA", color: "anotherDummy"},
{code: "4", fruits: "ORANGE", color: "orange"}];

items.filter((item, index) => {
  return item.fruits == "BANANA"
}).map((o,i) => {
	console.log(Object.values(o));
	/* To get keys from the object you can use Oject.keys method */
})
0 голосов
/ 11 марта 2020

const items = [{
    code: "1",
    fruits: "APPLE",
    color: "red"
  },
  {
    code: "2",
    fruits: "BANANA",
    color: "dummy"
  },
  {
    code: "3",
    fruits: "BANANA",
    color: "anotherDummy"
  },
  {
    code: "4",
    fruits: "ORANGE",
    color: "orange"
  }
]


const idx = items.filter((item, i) => item.fruits == "BANANA" ? item : '');
console.log(idx);
0 голосов
/ 11 марта 2020

вы можете использовать filter метод

let filteredArray = items.filter(item => item.fruits ==='BANANA');
console.log(filteredArray);

ОБНОВЛЕНИЕ

для дополнительных динамических c фильтров вы можете создать список из строк, которые вы хотите найти, скажем:

let fruitsToFilter = ['BANANA', 'APPLE',...]

и затем вы можете использовать метод фильтра, подобный этому, для достижения динамической c фильтрации

let filteredArray = items.filter(item => fruitsToFilter.includes(item.fruits));
console.log(filteredArray);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...