Как я могу отфильтровать массив объектов со значением из другого объекта? - PullRequest
0 голосов
/ 01 октября 2018

Я хочу написать функцию, которая принимает массив объектов с определенными парами ключ-значение в качестве первого аргумента.И объект с парами ключ-значение в качестве второго аргумента.

Функция должна проверить, найдены ли пары значений ключа из второго аргумента в массиве объектов из первого аргумента.

Еслипоэтому он должен возвращать массив объектов, которые имеют совпадающие пары имя и значение.

Например, если у меня есть массив объектов (первый аргумент):

[{name: "Peter", age: 21}, {name: "Kate", age: 18}, {name: "Tihon", age: 17}, {name: "Poopy", age: 17}]

И каквторой аргумент:

{age: 17}

Он должен вернуть:

[{name: "Tihon", age: 17}, {name: "Poopy", age: 17}]

Из-за совпадающего значения age

Это то, что я придумал, но донне знаю, что положить в цикл for...in:

   function checkTheName(list, check) {
     let newArr = [];
     for(let i = 0; i < list.length; i++){
        for(let key in list[i]){
            // Stuck here
        }
     }
     return newArr;
   }

Ответы [ 6 ]

0 голосов
/ 01 октября 2018

Простая версия ES6 с Array.prototype.filter и Array.prototype.every:

const data = [{name: "Peter", age: 21}, {name: "Kate", age: 18}, {name: "Tihon", age: 17}, {name: "Poopy", age: 17}];

const fObj = {age: 17};

const filtred = data.filter(item =>
    Object.keys(fObj).every(k => item.hasOwnProperty(k) && item[k] === fObj[k])
);

console.log(filtred);
0 голосов
/ 01 октября 2018
var filterobj ={age:17};
var data=[{name: "Tihon", age: 17}, {name: "Poopy", age: 17}]
 var newArray = data.filter(function (el) {
 return el.age ==filterobj.age;
}
0 голосов
/ 01 октября 2018

Вам нужно поставить условие if, сравнивая значение age вашего объекта check со значением age объекта list.Если оба значения равны, введите объект в newArr.

let list = [{ name: "Peter", age: 21 }, { name: "Kate", age: 18 }, { name: "Tihon", age: 17 }, { name: "Poopy", age: 17 }], 
    check = { age: 17 };
function checkTheName(list, check) {
  let newArr = [];
  for (let i = 0; i < list.length; i++) {
    if (list[i].age == check.age) {
      newArr.push(list[i]);
    }
  }
  return newArr;
}
console.log(checkTheName(list, check));

Кроме того, вы также можете использовать array#filter.

let list = [{name: "Peter", age: 21}, {name: "Kate", age: 18}, {name: "Tihon", age: 17}, {name: "Poopy", age: 17}],
    check = {age: 17},
    result = list.filter(o => o.age === check.age);
console.log(result);
0 голосов
/ 01 октября 2018

Используйте фильтр для циклического перемещения по массиву.

function findByAge(myArr, obj){
    myArr.filter( (item) => {
       if(obj.age === item.age){
         return item
       }
    })
}

Это вернет массив только с теми элементами массива, которые вы ищете.

Вы можете вызвать его в следующей строке.Так как функция возвращает новый массив.Нам нужно дать новому массиву имя (в этом примере newArray).

var newArray = findByAge(myArr, obj)

0 голосов
/ 01 октября 2018

Вы можете перебрать массив и проверить это свойство:

function checkTheName(check, list){
    for (var i=0; i < myArray.length; i++) {
        if (myArray[i].name === nameKey) {
            return myArray[i];
        }
    }
}

var array =[{name: "Peter", age: 21}, {name: "Kate", age: 18}, {name: "Tihon", 
age: 17}, {namenter code heree: "Poopy", age: 17}]
;

var resultObject = checkTheName( array,"string 1");
0 голосов
/ 01 октября 2018

Вы можете сделать это с помощью методов filter и every.

let a = [{name: "Peter", age: 21}, {name: "Kate", age: 18}, {name: "Tihon", age: 17}, {name: "Poopy", age: 17}]
let b = {age: 17}

function checkTheName(list, check) {
  return list.filter(o => Object.keys(check).every(k => {
    return (k in o) && check[k] == o[k]
  }))
}

console.log(checkTheName(a, b))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...