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

时间:2018-11-08 01:45:22

标签: javascript arrays nested key-value

因此在folders数组内。我想打印出大小不为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)
});

2 个答案:

答案 0 :(得分:1)

一个问题是if (f.size !== null);不应包含结尾的分号-这会使测试变得毫无意义,因为无论是否为空,分号都将意味着无论其后一行都将被执行。另一个是filter 总是返回数组中的原始项目,如果测试通过-对于您正在执行的操作,您可以使用filter(以筛选出空值) ),然后跟随map(进入name s):

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

答案 1 :(得分:1)

要实现此目的,请考虑结合使用function writeBuffer(string) { writeOut(string, 0); } function writeOut(string, start) { if(start >= string.length) return; myCharacteristic.writeValue(str2ab(string.substring(start, (start+20)))).then(foo => { writeOut(string, (start+20)); }); } Array#filter()

首先,使用Array#map()隔离大小不为filter()的文件夹项目:

null

,然后使用.filter(folder => folder.size !== null) 将过滤结果中的每个文件夹项目转换为该文件夹的名称:

map()

完整的示例可以看作:

.map(folder => folder.name)