【问题标题】:Push data inside an array index. React Native JSX将数据推送到数组索引内。反应原生 JSX
【发布时间】:2021-11-17 18:31:47
【问题描述】:

我正在尝试比较、查找和推送数组中的数据。但是出现以下错误

Error => TypeError: undefined is not an object (evalating 'data[index].push')

我有以下 JSON/数组

[
  {
     "category":"Super",
     "id":"1",
     "images":[],
     "status":"open",
     "url":"some url here"
  },
  {
     "category":"Pizza",
     "entitlement_id":"pizza_pack_ent",
     "id":"2",
     "images":[],
     "package_id":"pizza_pack_single",
     "status":"locked",
     "url":"some url here"
  }
]

我想将packages 对象推送到匹配类别中,因此 json/array 将如下所示

[
  {
     "category":"Super",
     "id":"1",
     "images":[],
     "status":"open",
     "url":"some url here"
  },
  {
     "category":"Pizza",
     "entitlement_id":"pizza_pack_ent",
     "id":"2",
     "images":[],
     "package_id":"pizza_pack_single",
     "status":"locked",
     "url":"some url here",
     "packages": [
         {
           "id":"abcds"
         },
         {
            "id": "xyz"
         }
      ]
  }
]

以下是我尝试做的代码:

data.forEach((category, index) => { //data is main json/array in which I want to push packages
       packages.forEach((pckg, idx) => {
            if(pckg.identifier === category.package_id){
              // data[category].push(pckg); //not worked
              data[index].push(pckg); //not worked either
            }
                
        })
 })
 console.log(data);

【问题讨论】:

  • data 是一个对象数组,所以 data[index] 将是一个对象。你不能推送到一个对象。
  • 那么如何将该对象转换为数组呢?
  • 或者解决方法是什么?
  • 根据您需要的结果,您不想将对象“转换”为数组。您想使用空数组(如果不存在)在该对象上创建一个 package 属性并推送到该对象
  • 附带说明,还请注意,如果 pckg.identifiercategory.package_id 都未定义,则评估 if(pckg.identifier === category.package_id) 可能会意外返回 true。因此,如果您有缺少 package_id 的类别(例如示例数组中的第一个元素),您可能也需要解决这个问题。

标签: javascript reactjs react-native jsx


【解决方案1】:
var packages = [
         {
           "id":"abcds"
         },
         {
            "id": "xyz"
         }
      ]
var categoryList = [
  {
     "category":"Super",
     "id":"1",
     "images":[],
     "status":"open",
     "url":"some url here"
  },
  {
     "category":"Pizza",
     "entitlement_id":"pizza_pack_ent",
     "id":"2",
     "images":[],
     "package_id":"pizza_pack_single",
     "status":"locked",
     "url":"some url here"
  }
]
categoryList.forEach(x=>x.packages=[...packages]);

【讨论】:

    【解决方案2】:

    我不知道你的 packages 数组是什么样子的,但这应该会给你预期的结果:

    data.forEach((category, index) => { //data is main json/array in which I want to push packages
           packages.forEach((pckg, idx) => {
                if(category.package_id  && pckg.identifier === category.package_id){
                  if (!category.packages) {
                      category.packages = [];
                  }
                    category.packages.push(pckg)
                }
                    
            })
     })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多