当对象数组又包含字符串数组时,如何过滤对象数组? [已关闭]

问题描述 投票:0回答:1

我有一个下面的数据模型,但不幸的是我尝试的过滤功能不起作用

var records = {
  "emp": ["Rob", "Mary", "Alex", "Martha", "Sam", "Peter"],
  "rank": [1, 2, 3, 4, 5, 6],
  "role": ["Senior", "Junior", "Mid-Senior", "Senior", "Junior", "Super Senior"],
  "country": ["Germany", "Spain", "Italy", "France", "UK", "Greece"]
};

然后函数应该返回每个键的所有记录作为输出 例如:根据 emp =“Mary”

进行过滤

结果:

var result = {
  "emp": ["Mary"],
  "rank": [2],
  "role": ["Junior"],
  "country": ["Spain"]
}

我尝试执行此功能,但没有成功,因为它不适用于此数据模型

var result = records.filter(function(item){
  return   item[emp] = "Mary";});
javascript arrays filter
1个回答
0
投票

不管我上面的评论如何......

结果结构并没有真正的意义,它应该是完全基于字符串的键值条目的对象。因此,人们甚至可以质疑源数据的结构,它完全粉碎了每个雇主实体。人们应该拥有一种以真正的雇主实体为特色的结构,例如:对于第一个...

{ name: "Rob", rank:"1", role: "Senior", country: "Germany" }
.

...OP 正在寻找的结果的数据结构可以这样实现...

const records = {
  emp: ["Rob", "Mary", "Alex", "Martha", "Sam", "Peter"],
  rank: [1, 2, 3, 4, 5, 6],
  role: ["Senior", "Junior", "Mid-Senior", "Senior", "Junior", "Super Senior"],
  country: ["Germany", "Spain", "Italy", "France", "UK", "Greece"],
};

// what the OP did ask for
const { emp: employeeNameList, ...searchData } = records;

const indexOfEmployee = employeeNameList.indexOf('Mary');
const originallyAskResult = {
  emp: [employeeNameList.at(indexOfEmployee)],
  ...Object
    .entries(searchData)
    .reduce((resultData, [key, employeeRelatedList]) => {

      resultData[key] = [employeeRelatedList.at(indexOfEmployee)];
      return resultData;

    }, {}),
}
console.log({ originallyAskResult });

© www.soinside.com 2019 - 2024. All rights reserved.