根据对象的键名过滤对象数组

时间:2021-03-31 16:27:50

标签: javascript arrays object

我有一个看起来像这样的对象数组:

var data = [
    {
        abc: { name:"abc" }
    },
    {
        new_abc:  {name:"hello" }
    },
    {
        def: { name:"def" }
    },
    {
        ghi: { name:"ghi" }
    },
    {
        new_ghi: { name:"world" }
    },
    {
        new_jkl: { name:"javascript" }
    },
    {
        lmn: { name:"lmn" }
    },
];

我只想要具有键名称以“new”开头的对象。在上面的数组中,我有 3 个这样的对象。

我希望输出是这样的:

[
    {
        new_abc:{name:"hello"}
    },
    {
        new_ghi:{name:"world"}
    },
    {
        new_jkl:{name:"javascript"}
    },
]

2 个答案:

答案 0 :(得分:2)

您可以执行以下操作,

var data = [
 {
  abc:{name:"abc"}
 },
 {
  new_abc:{name:"hello"}
 },
 {
  def:{name:"def"}
 },
 {
  ghi:{name:"ghi"}
 },
 {
  new_ghi:{name:"world"}
 },
 {
  new_jkl:{name:"javascript"}
 },
 {
  lmn:{name:"lmn"}
 }
]


res = data.filter(item => Object.keys(item).some(key => key.indexOf('new') === 0));
console.log(res);

答案 1 :(得分:0)

<块引用>

我只想要具有 name starts with "new"

键的对象

您可以像这样将 Array#filterString.prototype.startsWith() 结合使用。

const data = [{abc:{name:"abc"}},{new_abc:{name:"hello"}},{def:{name:"def"}},{ghi:{name:"ghi"}},{new_ghi:{name:"world"}},{new_jkl:{name:"javascript"}},{lmn:{name:"lmn"}}];

console.log(data.filter(item => Object.keys(item)[0].startsWith('new')));

<块引用>

startsWith() 方法确定字符串是否以 指定字符串的字符,返回 truefalse 作为 合适。

相关问题