2016-11-05 5 views
0

я получил массив так:Фильтр объектов массива

const xx = [ 
    { 
    name: "Alex", 
    income: 324300, 
    total: 3030000 
    }, 
    { 
    name: "Snake", 
    income: 3433000, 
    total: 34323000 
    } 
]; 

Я хочу, чтобы проверить, если доход больше, чем 300000 и если после этого их имя будет сохранено или войти.

Это то, что я пытался, я не в полной мере понять, как это работает так ..

var f = {}; 
for (var i = 0, len = xx.length; i < len; i++) { 
    f[xx[i].id] = xx[i]; 
    if(f[income]>=500000){ 
     console.log(xx[i]); 
    } 
} 
+0

Что такое 'f' для? Ваши объекты не имеют свойства '.id', поэтому' f [xx [i] .id] = xx [i] 'не имеет большого смысла. Вы имели в виду 'f [xx [i] .name]'? Нет переменной 'income', поэтому' f [доход] 'не имеет смысла, хотя на каждом объекте' xx [i] 'есть свойство' income' * *, так вы имели в виду 'xx [i]. доход' или 'f [xx [i] .name] .income'? –

ответ

2

Вы можете использовать Array.filter для фильтрации массива и массива Array.forEach для итерации по нему на console.log или w/e, которые вы хотите сделать с ним.

const xx = [ 
 
    { 
 
    name: "Alex", 
 
    income: 324300, 
 
    total: 3030000 
 
    }, 
 
    { 
 
    name: "Snake", 
 
    income: 3433000, 
 
    total: 34323000 
 
    }, 
 
    { 
 
    name: "Wake", 
 
    income: 4, 
 
    total: 3 
 
    } 
 
]; 
 

 
xx.filter(function(x) { 
 
    return x.income > 30000; 
 
}).forEach(function(x){ 
 
    console.log(x) 
 
});

+0

Почему все, кажется, используют '.map()' внезапно вместо '.forEach()', когда результат игнорируется? Это действительно странная тенденция, которая происходит. –

+0

Вы правы, редактирование – naortor

+0

спасибо, легко понять и работает :) – zzz

-2

Используйте фильтр для этого Проверьте этот фрагмент

const xx = [ 
 
    { 
 
    name: "Alex", 
 
    income: 324300, 
 
    total: 3030000 
 
    }, 
 
    { 
 
    name: "Snake", 
 
    income: 3433000, 
 
    total: 34323000 
 
    } 
 
]; 
 
xx.filter(function(item){ 
 
    if(item.income>324300) 
 
    alert(item.name); 
 
})

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

+3

Это неправильное использование 'filter'. Используйте 'forEach' – 4castle

+0

Почему это неправильно? – Geeky

+1

Функция, которую вы передаете фильтру, должна возвращать логическое значение. – 4castle

1

в ES5 вы можете использовать фильтр, чтобы получить массив заполнения с элементами, имеющими общее> 300000

var data = [ 
 
    { 
 
    name: "Alex", 
 
    income: 324300, 
 
    total: 30000 
 
    }, 
 
    { 
 
    name: "Snake", 
 
    income: 3433000, 
 
    total: 34323000 
 
    } 
 
]; 
 
var result = data.filter(x => x.total > 300000); 
 
console.log(result);

+0

['Array.prototype.filter()'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/ Reference/Global_Objects/Array/filter) определено в [ES5.1, Sec. 15.4.4.20] (http://www.ecma-international.org/ecma-262/5.1/#sec-15.4.4.20) – Andreas

+0

Ваш комментарий «в ES6 вы можете использовать фильтр ...» неправильно. Единственная причина, по которой ваше решение требует среды, совместимой с ES6, - это использование нотации стрелки. – Andreas

+0

Он просто говорит, что ваше предложение о том, что ES6 требуется для использования фильтра, неверно. Он может использоваться даже в более старых версиях JS. – 4castle

Смежные вопросы