javascript - 如何根据输入值数组返回对象数组的匹配结果

标签 javascript arrays json

我有一个像下面这样的对象数组

var item = [
    { "name": "John", "age": 30, "city": "New York1" },
    { "name": "John1", "age": 31, "city": "New York2" },
    { "name": "John2", "age": 32, "city": "New York3" },
    { "name": "John3", "age": 31, "city": "New York3" }
]

我想要的是从这个具有年龄属性值的对象数组中获取一些年龄 在 [30,31]

所以基本上输入将是一个整数数组,如 var ageArray=[30,31];

示例:

输入:[30,31]

输出:以下对象的 age 的总和

 { "name":"John", "age":30, "city":"New York1"},
 { "name":"John1", "age":31, "city":"New York2"},
 { "name":"John3", "age":31, "city":"New York3"}

所以这里是

92

我已经尝试为此使用过滤器,但不确定如何将 filter 与 contains 一起使用

我试过的是

var result = item .filter(obj => {
                    return obj.age..includes(ages);
                })

有人可以帮我解决这个问题吗?

最佳答案

使用Array#reduce

const items = [
{ "name":"John", "age":30, "city":"New York1"},
{ "name":"John1", "age":31, "city":"New York2"},
{ "name":"John2", "age":32, "city":"New York3"},
{ "name":"John3", "age":31, "city":"New York3"}]


const ages = [30, 31];
const res = items.reduce((sum, {age})=>{
  return sum + (ages.includes(age) ? age : 0);
}, 0);

console.log(res);

修改名称:

const items = [
{ "name":"John", "age":30, "city":"New York1"},
{ "name":"John1", "age":31, "city":"New York2"},
{ "name":"John2", "age":32, "city":"New York3"},
{ "name":"John3", "age":31, "city":"New York3"}]


const names = ["John", "john1"].map(n=>n.toLowerCase());
const res = items.reduce((sum, {name, age})=>{
  return sum + (names.includes(name.toLowerCase()) ? age : 0);
}, 0);

console.log(res);

关于javascript - 如何根据输入值数组返回对象数组的匹配结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53987932/

相关文章:

java - 多次调用 AsyncTask 失败(仅发生在旧版本的 android 上)

c# - 使用 Flurl 发布 JSON

javascript - 如何在 Node.js 中逐字节读取二进制文件

java - 用 2 个字符串的字符填充二维数组

c# - 如何使用自定义类型初始化数组

javascript - Protractor - 循环遍历不同的定位器以填充数组

javascript - 如果可能,将嵌套 JSON 结构中的每个对象重命名为其 .name 属性

javascript - 我的网页只打印到 1 页(没有中断)

javascript - 如何循环遍历 div 中的所有元素并查找包含文本的标签

javascript - 如何在多语言网站中翻译JS中的单词?