简体   繁体   English

如何修改复杂数组中的对象?

[英]How to modify object in complex array?

I have such a data structure: 我有这样的数据结构:

data: [
       {
         current: true,
         id: "3d6266501370d",
         name: "Option",
         items: [
                     {
                       hidden: false,
                       id: "ed716c12bf8f3",
                       data: "ffff",
                      }
                    ],
         selected_queries:[
                        {
                          id: 67896,
                          data: "ff",

                       }
          ]
        },    
     ]

and I need to edit just hidden filed of every object, other values I need to keep as it is. 而且我只需要编辑每个对象的隐藏文件,其他值我需要保持原样。 I created such a code: 我创建了这样的代码:

export const editField = (id, status) => {
  return new Promise((res) => {
    const data = getData();
    const newData = data.map(dataItem => {
      if (dataItem.current) {
        const newDataItem = dataItem.items.map(item => {
          if (item.id === id) {
              return Object.assign({}, item, {
                ...item,
                hidden: status,
              });
          } else {
            return item;
          }
        })
        return newDataItem;
      } else {
        return dataItem;
      }
    })
    res(newData);
  });
}

but I get new object whch has null. 但是我得到了新对象,其中有空值。 Can somebody help me with this? 有人可以帮我吗?

When you are calling data = getData() (per Marks's comment) it is assigning data = null until getData() returns. 当您调用data = getData() (根据Marks的评论),它将分配data = null直到getData()返回。 Only then is it getting updated. 只有这样,它才能更新。 So newData = data.map... is being run on nothing. 因此, newData = data.map...什么都没有运行。 You could assign a callback on getData : 您可以在getData上分配一个回调:

function getData(cb){
    data = get the data..
    cb(data)
}

//Then use it like:

const data = getData(function(data){
    newData = data.map...
});

You could transform getData() in a Promise too, something like: 您也可以在Promise中转换getData() ,例如:

var promiseData = new Promise(function(resolve, reject) {
  resolve(getData());
});

promiseData.then(function(data) {
  // THE REST OF YOUR CODE USING "data"
}).catch(function(error){
  console.error(error);
});

Then you'll be sure that you got the data you needed. 然后,您将确保获得所需的数据。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM