【问题标题】:Subset Json object in JavascriptJavascript中的子集Json对象
【发布时间】:2021-09-26 17:27:37
【问题描述】:

给定下面这样一组json对象,(“name2”和“name4”这样的json对象肯定只有一个key-value)

[
  {
    abc: 123,
    id: '18263322',
    name: 'name1'
  },
  { name: 'name2' },
  {
    abc: 456,
    id: '18421634',
    name: 'name3'
  },
  { name: 'name4' }
]

如何将其子集化,以便拥有两个 json 对象数组:

[
  {
    abc: 123,
    id: '18263322',
    name: 'name1'
  },
  {
    abc: 456,
    id: '18421634',
    name: 'name3'
  }
]

[
  { name: 'name2' },
  { name: 'name4' }
]

【问题讨论】:

  • 你到底想要什么?你能解释一下你的问题吗?谢谢
  • 使用Array.prototype.reduce
  • 我想将第一个数组(在第一个代码部分)拆分为两个 json 数组。我使用这个代码:data = [ { abc: 123, id: '18263322', name: 'name1' }, { name: 'name2' }, { abc: 456, id: '18421634', name: 'name3' }, { name: 'name4' } ] data.filter(function(x) { console.log(Object.keys(x).length !== 1); }); 这让我知道真假,但不是数组本身,而且处理起来似乎很慢
  • @SunTianyi 既然您已经尝试过,那么您应该将其包含在问题本身中。以便其他人可以了解您的尝试

标签: javascript arrays json subset slice


【解决方案1】:

你可以在这里使用reduce

const arr = [
  {
    abc: 123,
    id: "18263322",
    name: "name1",
  },
  { name: "name2" },
  {
    abc: 456,
    id: "18421634",
    name: "name3",
  },
  { name: "name4" },
];

const [single, multiple] = arr.reduce((acc, curr) => {
    Object.keys(curr).length === 1 ? acc[0].push(curr) : acc[1].push(curr);
    return acc;
  },[[], []]
);

console.log(single);
console.log(multiple);

你也可以这样做

const [single, multiple] = arr.reduce((acc, curr) => {
    acc[Object.keys(curr).length === 1 ? 0 : 1].push(curr);
    return acc;
  },[[], []]);

使用过滤器

const arr = [
  {
    abc: 123,
    id: "18263322",
    name: "name1",
  },
  { name: "name2" },
  {
    abc: 456,
    id: "18421634",
    name: "name3",
  },
  { name: "name4" },
];

const single = arr.filter((o) => Object.keys(o).length === 1);
const multiple = arr.filter((o) => Object.keys(o).length !== 1);

console.log(single);
console.log(multiple);

【讨论】:

  • 这就像一个魅力!我想过Object.keys(x).length,但从未想过减少。非常感谢!
  • @SunTianyi 也添加了带有过滤器的解决方案。看看
  • 您介意评论一下哪个更有效吗?我认为 reduce 更有效,因为它似乎只循环一次?而第二种方法执行两个过滤器循环@decpk
  • 如果数据集很小,您不应该考虑有效的解决方案。如果它有数百万条记录,那么我会选择 reduce,因为它需要一个循环来过滤数据。
  • 感谢您的建议!我问的是效率,因为我可能有一万条记录。
猜你喜欢
  • 1970-01-01
  • 2013-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-05
  • 2020-11-24
  • 1970-01-01
  • 2013-10-17
相关资源
最近更新 更多