繁体   English   中英

过滤搜索所有键值对的对象数组

[英]Filter an array of objects searching all key-value pairs

假设我在JavaScript中有一个对象数组,看起来像这样:

namesArray = [
  { name: 'John', friend: 'Steve', brother: 'Jeff', sister: 'Karen'},
  { name: 'Sarah', friend: 'Joan', brother: 'Marvin', sister: 'Diana'},
  { name: 'Morris', friend: 'Tanya', brother: 'Mike', sister: 'Lisa'},
  { name: 'Brian', friend: 'Tim', brother: 'Andrew', sister: 'Tanya'},
];

如果我想将上述数组中包含“ Tanya”值的对象过滤到一个新数组中,该如何处理? 新数组如下所示:

newArray = [
  { name: 'Morris', friend: 'Tanya', brother: 'Mike', sister: 'Lisa'},
  { name: 'Brian', friend: 'Tim', brother: 'Andrew', sister: 'Tanya'},
];

您正在寻找filter

 namesArray = [ { name: 'John', friend: 'Steve', brother: 'Jeff', sister: 'Karen'}, { name: 'Sarah', friend: 'Joan', brother: 'Marvin', sister: 'Diana'}, { name: 'Morris', friend: 'Tanya', brother: 'Mike', sister: 'Lisa'}, { name: 'Brian', friend: 'Tim', brother: 'Andrew', sister: 'Tanya'}, ]; const output = namesArray.filter(obj => Object.values(obj).findIndex(val => val === 'Tanya') > -1 ) console.log(output) 

这是一个需要Object.valuescaniuse? )的简短解决方案:

 var namesArray = [ { name: 'John', friend: 'Steve', brother: 'Jeff', sister: 'Karen' }, { name: 'Sarah', friend: 'Joan', brother: 'Marvin', sister: 'Diana' }, { name: 'Morris', friend: 'Tanya', brother: 'Mike', sister: 'Lisa' }, { name: 'Brian', friend: 'Tim', brother: 'Andrew', sister: 'Tanya' }, ]; var tanyaOnly = namesArray.filter(e => Object.values(e).indexOf("Tanya") > -1); console.log(tanyaOnly); 

使用includes会容易得多。

 const namesArray = [ { name: 'John', friend: 'Steve', brother: 'Jeff', sister: 'Karen'}, { name: 'Sarah', friend: 'Joan', brother: 'Marvin', sister: 'Diana'}, { name: 'Morris', friend: 'Tanya', brother: 'Mike', sister: 'Lisa'}, { name: 'Brian', friend: 'Tim', brother: 'Andrew', sister: 'Tanya'}, ]; let filteredArray = namesArray.filter(x => Object.values(x).includes('Tanya') === false); console.log(filteredArray); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM