开发者问题收集

在 React Native 中获取数组映射中的非空项[重复]

2022-04-20
1443

我已经使用 React Native 循环来填充如下所示的选择项

   const categorylist = arr.map((data, key) => {
      if (data != "") {
        return <Select.Item label={data} value={data} key={data} />;
      }
    });

我循环并像下面这样使用它,当数组包含非空值时它工作正常,但是当有空值时我收到错误

TypeError:null 不是对象(评估'child.props')

   <Select>
     {categorylist2}
    </Select>

如何使用 map 仅发送非空数组项。请注意我不希望 arr 受到影响,因为我需要它在其他函数中保持不变。

3个回答

filter 删除空元素,然后 map 遍历 filter 返回的数组。

这里有一个设计出来的例子来向你展示它是如何工作的。

const arr = [undefined, 'Bob', '', 'Sally', 'Joe', '', null, 'Pam'];

// `filter` out the empty/null/undefined elements
// and then `map` over that filtered array
const out = arr
  .filter(el => el)
  .map(el => `<div>${el}</div>`);

document.body.innerHTML = out.join('');
Andy
2022-04-20

仅当数组不为空时才需要映射数组,并使用 filter(Boolean) 过滤掉空数组。

const newArr = arr.filter(Boolean);
const categorylist = (newArr.length > 0) && newArr.map((data, key) => {
    return <Select.Item label={data} value={data} key={data} />;
});
bnays mhz
2022-04-20

这是因为在您的映射中,您没有为空值返回任何内容,这意味着 null,这就是您出现错误的原因。映射函数应该始终返回某些内容。

在映射之前使用过滤器,如下所示:

arr.filter(data => data !== "").map(data => <Select.Item label={data} value={data} key={data} />)

Alexander Krum
2022-04-20