【问题标题】:Filter array of objects and leave only one record of a specific category in the array and leave others as they are过滤对象数组并在数组中仅保留特定类别的一条记录,其他记录保持原样
【发布时间】:2020-10-09 13:17:12
【问题描述】:

我有一个对象数组。例如:

const obj = [
 {category: "Category", value: 1},
 {category: "Category", value: 2},
 {category: "Category", value: 3},
 ...
 {category: "Category1", value: 1},
 {category: "Category1", value: 2},
 {category: "Category1", value: 3},
 ...
 {category: "Category2", value: 1},
 {category: "Category2", value: 2},
 {category: "Category2", value: 3},
];

我需要为这个输出过滤它:

const filteredObj = [
 {category: "Category", value: 1},
 {category: "Category", value: 2},
 {category: "Category", value: 3},
 ...
 {category: "Category1", value: 1},
 {category: "Category1", value: 2},
 {category: "Category1", value: 3},
 ...
 {category: "Category2", value: 1},
];

保留所有类别,但只为“Category2”保留一条记录。

【问题讨论】:

  • 你想保留Category2中的哪些记录?
  • obj.filter(o => o.category != 'Category2' || o.value == 1) 应该这样做。
  • 为什么不使用 Array.filter 按类别和值字段的条件? developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
  • @Bergi 任何一个,价值可以是任何东西,只有类别很重要。

标签: javascript arrays object filter


【解决方案1】:

检查一下

var obj = [
{category: "Category", value: 1},
{category: "Category", value: 2},
{category: "Category", value: 3},
{category: "Category1", value: 1},
{category: "Category1", value: 2},
{category: "Category1", value: 3},

{category: "Category2", value: 1},
{category: "Category2", value: 2},
{category: "Category2", value: 3},
];
let isInclude = false;
console.log(obj);
console.log(obj.filter(ele=>{
if(ele.category == "Category2" && !isInclude){
isInclude = true;
return ele;
}
else if(ele.category !== "Category2")
return ele;
}));

【讨论】:

    【解决方案2】:

    您可以通过柜台关闭。

    const 
        filterAtZero = count => ({ category }) => category !== 'Category2' || !count++,
        data = [{ category: "Category", value: 1 }, { category: "Category", value: 2 }, { category: "Category", value: 3 }, { category: "Category1", value: 1 }, { category: "Category1", value: 2 }, { category: "Category1", value: 3 }, { category: "Category2", value: 1 }, { category: "Category2", value: 2 }, { category: "Category2", value: 3 }],
        result = data.filter(filterAtZero(0));
    
    console.log(result);
    .as-console-wrapper { max-height: 100% !important; top: 0; }

    【讨论】:

    • 您拆分 IIFE 的方式看起来像是将两个参数传递给 filter
    • 把它放在一行中。使用 let 而不是 IIFE。或者写result = (count => data.filter(…))(0);.
    猜你喜欢
    • 2019-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多