javascript - 如果 Javascript 中不存在默认数组过滤器对象,如何获取它

标签 javascript arrays

我有一个数组:

const data = [
              {location: "Phnom Penh", sale: 1000 },
              {location: "Kandal", sale: 500 },
              {location: "Takeo", sale: 300 },
              {location: "Kompot", sale: 700 },
              {location: "Prey Veng", sale: 100 },
              {location: "Seam Reap", sale: 800 },
              {location: "Null", sale: 0}
            ];

这是我的功能过滤器:
function getSale(data, arr) {
  return data
    .filter(el => arr.includes(el.location))
}
arr = getSale(data, ['Phnom Penh', 'AA', 'Kompot', 'BB']);
console.log(arr);
result: [{
    location: "Phnom Penh",
    sale: 1000
  },
  {
    location: "Kompot",
    sale: 700
  }
]

如果在过滤器中找不到“AA”,我希望它得到“空”对象。

我的目的我想要这样的结果:
 result: [
  {location: "Phnom Penh", sale: 1000},
  {location: "Null", sale: 0},
  {location: "Kompot", sale: 700},
  {location: "Null", sale: 0}
 ]

我怎样做?感谢帮助。

最佳答案

你应该使用 .map.find :

const data = [
  { location: 'Phnom Penh', sale: 1000 },
  { location: 'Kandal', sale: 500 },
  { location: 'Takeo', sale: 300 },
  { location: 'Kompot', sale: 700 },
  { location: 'Prey Veng', sale: 100 },
  { location: 'Seam Reap', sale: 800 },
  { location: 'Null', sale: 0 },
];

function getSale(data, arr) {
  return arr.map(el => {
    const found = data.find(obj => obj.location === el);
    return found ? found : { location: 'Null', sale: 0 };
  });
}
arr = getSale(data, ['Phnom Penh', 'AA', 'Kompot', 'BB']);
console.log(arr);



或者从数据数组创建哈希并直接使用 .map :

const data = [
  { location: 'Phnom Penh', sale: 1000 },
  { location: 'Kandal', sale: 500 },
  { location: 'Takeo', sale: 300 },
  { location: 'Kompot', sale: 700 },
  { location: 'Prey Veng', sale: 100 },
  { location: 'Seam Reap', sale: 800 },
];

const hash = data.reduce((hash, obj) => {
  hash[obj.location] = obj;
  return hash;
}, {});
function getSale(data, arr) {
  return arr.map(el => hash[el] || { location: 'Null', sale: 0 });
}
arr = getSale(data, ['Phnom Penh', 'AA', 'Kompot', 'BB']);
console.log(arr);

关于javascript - 如果 Javascript 中不存在默认数组过滤器对象,如何获取它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60539976/

相关文章:

javascript - jQuery 没有在幻灯片容器 div 中加载元素

javascript - 当未设置显式值且字段包含任何字符时,Angular ng-maxlength 将字段标记为无效

arrays - 如何使用函数、 "For"循环和 Excel VBA 中的两个现有数组输出值数组?

python - 递归调度算法不能正常工作 Python

java - Java中的二进制搜索

javascript - 在 Fixed Header Uncaught TypeError top undefined 中

javascript - 如何允许插件的内容脚本从当前选项卡访问 Javascript 变量?

javascript - Vue JS 2 数据操作

c - 在不使用循环的情况下确定特定元素的数组索引

c++ - 二维数组 C++ 错误