Сообщение от рони
|
sovsem-nub,
[...getUsersByKeyValue(users, "eyeColor", "blue"), ...getUsersByKeyValue(users, "eyeColor", "green")]
|
то есть я складываю цвет глаз и ищу "пересечение" массива глаз с женщинами?
https://jsfiddle.net/zip13/oc29phwx/22/
или другая логика?
//Получить массив объектов пользователей по цвету глаз (поле eyeColor)
const getUsersByKeyValue = (arr, key, value) =>
arr.filter(user => (user = user[key], Array.isArray(user) ? user.includes(value) : user == value));
//let arrFilter = getUsersByKeyValue(users, "friends", "Briana Decker");
//console.log(arrFilter.map(el => el.name));
arrFilter = getUsersByKeyValue(users, "eyeColor", "blue");
arrFilter2 = getUsersByKeyValue(users, "eyeColor", "green");
arrFilter3 = getUsersByKeyValue(users, "gender", "female");
var args2=[];
args2.push((arrFilter.map(el => el.name)).concat(arrFilter2.map(el => el.name)));
args2.push(arrFilter3.map(el => el.name));
console.log(intersect(args2));
function intersect(args){
if(args.length == 0) return [];
// for optimisation lets find the smallest array
var imin = 0;
for(var i = 1; i < args.length; i++)
if(args[i].length < args[imin].length) imin = i;
var smallest = Array.prototype.splice.call(args, imin, 1)[0];
return smallest.reduce(function(a, e){
for(var i = 0; i < args.length; i++)
if(args[i].indexOf(e) == -1) return a;
a.push(e);
return a;
}, []);
}