.isArray不返回预期值

时间:2019-06-18 14:56:40

标签: javascript reactjs

我正在映射组件中配置文件中的某些项目,如果某个项目是数组,我想将数组中的每个值都呈现在一起。我正在使用.isArray来检查某项是否为数组,但是当我期望它没有返回值时。

示例配置

items: [
          {
            text: 'some text',
            url: '/some-url.html'
          }, {
            text: 'some text',
            url: '/some-url.html'
          }, [
            {
              text: 'some text',
              url: '/some-url.html'
            },
            {
              text: 'some text',
              url: '/some-url.html'
            }
          ], {
            text: 'some text',
            url: '/some-url.html'
          }
]

    const items = items.filter(item => {
      return item.text !== undefined
    }).map((item, itemKey) => {
      if (item.isArray) return console.log(item);
      return (
        <Item key={key} item={item.url} />
      )
    })

我的物品中有一个数组,但没有获取console.log

3 个答案:

答案 0 :(得分:4)

isArray是Array中的一种方法。

如果您在括号内传递的是数组,它将返回 true false

Array.isArray([1, 2, 3]); // true or false

在您的情况下,您应该像这样检查它:

const items = items.filter(item => {
      return item.text !== undefined
    }).map((item, itemKey) => {
      if (Array.isArray(item)) return console.log(item);
      return (
        <Item key={key} item={item.url} />
      )
    })

  

DOCS https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray

答案 1 :(得分:0)

const items = items.filter(item => {
      return item.text !== undefined
    }).map((item, itemKey) => {
      if (item.isArray) return console.log(item);
      return (
        <Item key={key} item={item.url} />
      )
    })

此代码中有几个问题。首先,对于数组中的所有值,item.isArrayundefined。这些项目均没有密钥isArray。要解决此问题,请将其更改为

Array.isArray(item);

接下来,console.log(item)返回undefined。这意味着即使您进行了上述更改,您也会在某些位置获得包含undefined个元素的列表。

答案 2 :(得分:0)

        const items = [
                  {
                    text: 'some text',
                    url: '/some-url.html'
                  }, {
                    text: 'some text',
                    url: '/some-url.html'
                  }, [
                    {
                      text: 'some text',
                      url: '/some-url.html'
                    },
                    {
                      text: 'some text',
                      url: '/some-url.html'
                    }
                  ], {
                    text: 'some text',
                    url: '/some-url.html'
                  }
        ]
        
        
        const data = items.filter(item => {
              return item.text !== undefined
            })
        console.log(data) // this line return the following comment
        /*[
          {
            "text": "some text",
            "url": "/some-url.html"
          },
          {
            "text": "some text",
            "url": "/some-url.html"
          },
          {
            "text": "some text",
            "url": "/some-url.html"
          }
        ] */
    
       // So It will never run the if condition in below code because there is no child array in the filtered array.
        data.map((item, itemKey) => {
              if (Array.isArray(item)) return console.log("I'm an array")
              return console.log("I'm not an array")
            })