首页 > 解决方案 > 在数组中的键值对中输出不为空的键值对 JavaScript

问题描述

所以在文件夹数组里面。我想打印出大小不为 null 的文件夹的“名称”。

let folders = [
  {
    name:'user_name',
    size: 5455,
    information: ' '
    },
  {
    name:'untitled',
    size: 545343,
    information: 'no description'
  },
  {
    name:'new_user',
    size: null
  }
];

因此,我编写了此代码以获取大小不为 null 的文件夹的名称,但是当我对其进行测试时,它只会打印出所有数组。我无法弄清楚我做错了什么。

folders.forEach((item) => {
  let info = folders.filter((f) => {
    if (f.size !== null);
    return item.name
  })
  console.log(info)
});

标签: javascriptarraysnestedkey-value

解决方案


一个问题是不if (f.size !== null);应该有一个尾随分号 - 这将使测试毫无意义,因为无论它是否为空,分号都意味着后面的行将被执行。另一个是filter 总是返回数组中的原始项目,如果测试通过 - 对于你正在做的事情,你可以使用filter(过滤掉空大小)后跟map(到达names):

let folders = [
  {
    name:'user_name',
    size: 5455,
    information: ' '
    },
  {
    name:'untitled',
    size: 545343,
    information: 'no description'
  },
  {
    name:'new_user',
    size: null
  }
];
console.log(
  folders
    .filter(({ size }) => size !== null)
    .map(({ name }) => name)
);

如果您想在数组的次迭代中实现它,请同时使用reducetofiltermap

let folders = [
  {
    name:'user_name',
    size: 5455,
    information: ' '
    },
  {
    name:'untitled',
    size: 545343,
    information: 'no description'
  },
  {
    name:'new_user',
    size: null
  }
];
console.log(
  folders.reduce((a, { name, size }) => {
    if (size !== null) a.push(name);
    return a;
  }, [])
);


推荐阅读