[英]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.