свойство к числу, прежде чем передать его

я есть массив объектов

people = [
    {id: "1", name: "abc", gender: "m", age:"15" },
    {id: "2", name: "a", gender: "m", age:"25" },
    {id: "3", name: "efg", gender: "f", age:"5" },
    {id: "4", name: "hjk", gender: "m", age:"35" },
    {id: "5", name: "ikly", gender: "m", age:"41" },
    {id: "6", name: "ert", gender: "f", age:" 30" },
    {id: "7", name: "qwe", gender: "f", age:" 31" },
    {id: "8", name: "bdd", gender: "m", age:" 78" },
]

У меня есть другой массив:

id_filter = [1,4,5,8]

Я хочу отфильтровать множество людей, еслиid соответствует любому из элементов вid_filter массив иgender = m

Как я могу сделать это в JavaScript, используя функцию фильтра?

 ideaboxer23 окт. 2017 г., 18:57
Вместо понижения вопроса, пожалуйста, прокомментируйте.
 ideaboxer23 окт. 2017 г., 19:06
Пожалуйста, используйте либоconst или жеlet объявить переменные, напримерconst people = [].

Ответы на вопрос(9)

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

for(person in people) {
     for(id in id_filter) {
         if(person[id] == id && person[gender] == "m"){

         }
     }
}
 ios_star23 окт. 2017 г., 18:45
Я хочу отфильтрованный массив, а также идентификаторы не в последовательном. также необходимо добавить еще одно условие, что пол = м
 inxoy23 окт. 2017 г., 18:45
спасибо я адаптирую ответ

    {id: "1", name: "abc", gender: "m", age: "15" },
    {id: "2", name: "a", gender: "m", age: "25" },
    {id: "3", name: "efg", gender: "f", age: "5" },
    {id: "4", name: "hjk", gender: "m", age: "35" },
    {id: "5", name: "ikly", gender: "m", age: "41" },
    {id: "6", name: "ert", gender: "f", age: " 30" },
    {id: "7", name: "qwe", gender: "f", age: " 31" },
    {id: "8", name: "bdd", gender: "m", age: " 78" },
]

const idFilter = [1,4,5,8]

const idIsInList = id => idFilter.includes(+id) // "+id" to make sure it is a number, not a string
const genderIsMale = gender => gender === "m"
const result = people.filter(item => idIsInList(item.id) && genderIsMale(item.gender))

console.log(result)

Array.includes() функция:

var people = [
    {id : "1", name : "abc", gender : "m", age :"15" }, {id : "2", name : "a", gender : "m", age :"25" },
    {id : "3", name : "efg", gender : "f", age :"5" },  {id : "4", name : "hjk", gender : "m", age :"35" },
    {id : "5", name : "ikly", gender : "m", age :"41" }, {id : "6", name : "ert", gender : "f", age :" 30" },
    {id : "7", name : "qwe", gender : "f", age :" 31" }, {id : "8", name : "bdd", gender : "m", age :" 78" }
], 
    id_filter = [1,4,5,8],
    result = people.filter((o) => id_filter.includes(+o.id) && o.gender == "m");       
	
console.log(result);

+o.id - + используется здесь, чтобы привести числовую строку в число

var filtered_people = people.filter(function(person){
    return id_filter.includes(person.id) && person.gender === 'm';
});

Просто убедитесь, что идентификатор каждого человека является целым числом, а не строкой, как в вашем примере. В противном случае функция include () не будет соответствовать. Кроме того, вашpeople Массив имеет внутренние проблемы с синтаксисом. Итак, окончательный код будет выглядеть так:

var people = [
    {id: 1, name: "abc", gender: "m", age:15},
    {id: 2, name: "a", gender: "m", age: 25},
    {id: 3, name: "efg", gender: "f", age: 5},
    {id: 4, name: "hjk", gender: "f", age: 35},
    {id: 5, name: "ikly", gender: "m", age: 41},
    {id: 6, name: "ert", gender: "f", age: 30},
    {id: 7, name: "qwe", gender: "f", age: 31},
    {id: 8, name: "bdd", gender: "m", age: 78}
];
var id_filter = [1,4,5,8];
var filtered_people = people.filter(function(person){
    return id_filter.includes(person.id) && person.gender === 'm';
});

Я надеюсь, это поможет вам. Удачи.

Вы можете использоватьarray.filter() с несколькими условиями, чтобы получить желаемый результат. Также я исправил ваш JSON.

var filtered = people.filter(function(item) {
        return id_filter.indexOf(item.id) !== -1 && item.gender==='m';
});

DEMO

var  people =[
  { "id": 1, "name": "abc", "gender": "m","age": "15" },
  { "id": 2, "name": "a", "gender": "m", "age": "25"  },
  { "id": 3,"name": "efg", "gender": "f","age": "5" },
  { "id": 4,"name": "hjk","gender": "m","age": "35" },
  {  "id": 5, "name": "ikly","gender": "m","age": "41" },
  { "id": 6, "name": "ert", "gender": "f", "age": "30" },
  { "id": 7, "name": "qwe", "gender": "f", "age": "31" },
  { "id":8, "name": "bdd",  "gender": "m", "age": " 8" }
];
var id_filter = [1,4,5,8];
var filtered = people.filter(function(item) {
    return id_filter.indexOf(item.id) !== -1 && item.gender==='m';
});
console.log(filtered);

 Nick Timmer23 окт. 2017 г., 18:53
Я голосую за ваш ответ, потому что он использует функцию filter () по запросу

фильтр функция, похожая на эту:

people.filter((person) => id_filter.includes(person.id))

 Joe Sasson23 окт. 2017 г., 19:02
people.filter((person) => person.gender == 'm')
 ios_star23 окт. 2017 г., 18:48
что если я хочу добавить еще одно условие, что пол должен быть == m?

поскольку ваши идентификаторы являются строковыми, перед использованием их необходимо проанализировать.

var result = people.filter((person) => (id_filter.includes(parseInt(person.id)) && person.gender ==='m'))

            {id : "1", name : "abc", gender : "m", age :"15" },
        {id : "2", name : "a", gender : "m", age :"25" },
        {id : "3", name : "efg", gender : "f", age :"5" },
        {id : "4", name : "hjk", gender : "m", age :"35" },
        {id : "5", name : "ikly", gender : "m", age :"41" },
        {id : "6", name : "ert", gender : "f", age :" 30" },
        {id : "7", name : "qwe", gender : "f", age :" 31" },
        {id : "8", name : "bdd", gender : "m", age :" 78" }
    ]
    var id_filter = ["1","4","5","8"], filteredPeople = []; 
    for( var i=people.length-1; i>=0; --i){ 
      if( id_filter.indexOf( people[i].id ) != -1 ){ 
        filteredPeople.push( people[i] ); 
      } 
    }
    console.log( filteredPeople );

Array.prototype.filter любить:

function filter(arr, ids, gender) {                              // takes an array of people arr, an array of indexes ids, and a gender and return the matched people objects from arr
  return arr.filter(function(obj) {                              // filtering each object...
    return ids.includes(obj.id) && obj.gender === gender;        // if this object is is included in the ids array and if its gender property is equal to the desired gender
  });
}

var people = [{id:"1",name:"abc",gender:"m",age:"15"},{id:"2",name:"a",gender:"m",age:"25"},{id:"3",name:"efg",gender:"f",age:"5"},{id:"4",name:"hjk",gender:"m",age:"35"},{id:"5",name:"ikly",gender:"m",age:"41"},{id:"6",name:"ert",gender:"f",age:"30"},{id:"7",name:"qwe",gender:"f",age:"31"},{id:"8",name:"bdd",gender:"m",age:"78"}];

console.log(filter(people, ["5", "7", "4"], "m"));               // filtering elements where id is one of ["5", "7", "4"] and the gender is "m".

Примечание: id свойство объектов вpeople являются строками, поэтому вы должны либо предоставить массив идентификаторов строк дляfilter или преобразоватьid свойство к числу, прежде чем передать егоincludes.

Ваш ответ на вопрос