输出数组中键值对中不为空的键值对 JavaScript

outputting key value pairs that aren't null in Key Value pairs in arrays JavaScript

所以在文件夹数组中。我想打印出大小不为 null 的文件夹的 'name'。

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

所以我编写了这段代码是为了获取大小不为空的文件夹的名称,但是当我测试它时,它只打印出所有数组。我不太明白我做错了什么。

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

一个问题是 if (f.size !== null); 不应该有尾随分号 - 这将使测试变得毫无意义,因为无论它是否为 null,分号都意味着无论怎样都会执行后面的行.另一个是 filter always returns 数组中的原始项目,如果测试通过 - 对于你正在做的事情,你可能会使用 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)
);

如果你想在数组的 单次 迭代中实现它,请同时使用 reducefiltermap时间:

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;
  }, [])
);

为此,请考虑将 Array#filter()Array#map() 结合使用。

首先,使用filter()隔离大小不是null的文件夹项目:

.filter(folder => folder.size !== null)

然后使用map()将筛选结果中的每个文件夹项目转换为该文件夹的名称:

.map(folder => folder.name)

完整的例子可以看成:

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

let result = folders
.filter(folder => folder.size !== null)
.map(folder => folder.name)

console.log(result)