大佬教程收集整理的这篇文章主要介绍了有没有一种聪明的方法可以使用 JavaScript 的解构方法来修改对象内的数组?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
以下示例演示了我想要实现的目标:
const data_template = {
key: 1,data_object: {
data1: 1,data2: 2,data3: 3
},data_array: [
{ key: 1,data1: 1 },{ key: 2,data1: 2 },{ key: 3,data1: 3 }
]
}
let data = [];
data.push({ ...data_template,key: 1 });
data.push({ ...data_template,key: 2 });
console.log(data);
通过使用解构,我可以轻松地修改我的“模板对象”(data_template
),同时将它的实例添加到我的“数据数组”中。上面代码的结果是:
[
{
key: 1,data_object: { data1: 1,data3: 3 },data_array: [ [Object],[Object],[Object] ]
},{
key: 2,[Object] ]
}
]
如您所见,我的数组 (data
) 中有 2 个对象,每个对象都有一个唯一键(分别为 1 和 2)。
现在我的问题是:如何修改 data_array
中的键,它是我的“数据模板”中的一个数组?有没有一种聪明的方法可以通过解构来做到这一点?
取决于你想做什么。
如果你只是想用额外的元素克隆数组:
data.push({
...data_template,key: 1,data_array: [
...data_template.data_array,{ key: 4,data1: 4},],});
如果你想例如向 data_array
内的所有对象添加一个新字段:
key
字段
否则我无法立即想到您可以使用的任何其他解构“技巧”。
,不,你不能。
JavaScript 解构只允许您覆盖对象的根级键,从而替换它们的值。
(您通常也不会这样做,以保持较低的认知复杂性。)
长答案
实际上有更好的方法可以做到这一点。
通常,当通过传播创建新对象变得更加复杂时,您只需为每个嵌套级别创建一个函数,并为它取一个比我做的更好的名称,与您的域相关联。
这正是函数的用途;拆分代码片段以降低复杂性。
简单示例
function createDataEntry(key,data) {
return { key,data }
}
function createRecord(key,data) {
return {
key,dataObject: {
data,},dataArray: [
createDataEntry(key,data),// or simply:
// { key,data },]
}
}
let data = [];
data.push(createRecord(1,'foo'));
data.push(createRecord(2,'bar'));
console.log(JSON.Stringify(data,null,2));
生产
[
{
"key": 1,"dataObject": {
"data": "foo"
},"dataArray": [
{
"key": 1,"data": "foo"
}
]
},{
"key": 2,"dataObject": {
"data": "bar"
},"dataArray": [
{
"key": 2,"data": "bar"
}
]
}
]
添加 + 编辑示例
如果您想添加或编辑该数据数组中的条目,您必须检查该条目是否已存在。
如果它已经存在,使用地图更新它。
如果不存在,使用array.push()。
function addOrupdateEntry(myObject,key,data) {
let updated = false;
const updatedObject = {
...myObject,items: myObject.items.map(member => {
if (member.key === key) {
updated = true;
return { ...member,data };
}
return member;
})
};
if (!updated) {
updatedObject.items.push({ key,data });
}
return updatedObject;
}
let data = {
items: []
};
data = addOrupdateEntry(data,1,"foo");
data = addOrupdateEntry(data,2,"bar");
data = addOrupdateEntry(data,"baz");
console.log(JSON.Stringify(data,2));
输出什么
{
"items": [
{
"key": 1,"data": "foo"
},{
"key": 2,"data": "baz"
}
]
}
请注意,改变现有对象很容易在 JavaScript 中产生不受欢迎的行为,因此会创建一个新对象并从函数中返回该对象。
这个概念叫做immutability
。
以上是大佬教程为你收集整理的有没有一种聪明的方法可以使用 JavaScript 的解构方法来修改对象内的数组?全部内容,希望文章能够帮你解决有没有一种聪明的方法可以使用 JavaScript 的解构方法来修改对象内的数组?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。