Javascript 需要将对象添加到处于状态的数组中
我需要向数组的最后一个对象添加一个对象 我有一个数组,其中包含处于类状态的对象Javascript 需要将对象添加到处于状态的数组中,javascript,arrays,reactjs,object,Javascript,Arrays,Reactjs,Object,我需要向数组的最后一个对象添加一个对象 我有一个数组,其中包含处于类状态的对象 state={ items:[{key:"333",val:"Hi"},{key:"555", val:"Iam"}] } 我需要在最后一个item对象添加一个filter对象 items:[{key:"333",val:"Hi"},{key:"555", val:"Iam",filter:{refine:true}}] 我试过下面的那个 (this.state.items.length-1).conca
state={
items:[{key:"333",val:"Hi"},{key:"555", val:"Iam"}]
}
我需要在最后一个item对象添加一个filter对象
items:[{key:"333",val:"Hi"},{key:"555", val:"Iam",filter:{refine:true}}]
我试过下面的那个
(this.state.items.length-1).concat({filters:{
refine:true
}}
您只需使用数组的
索引方法访问最后一个对象,修改它并更新状态数组
let状态={
项目:[{键:“333”,val:“Hi”},{键:“555”,val:“Iam”}]
}
let last=state.items[state.items.length-1];
last={……last,过滤器:{refine:true}};
常数newState={
……国家,
项目:[
…state.items.slice(0,-1),
最后的
]
}
console.log(newState)代码>您可以获取最后一个元素,然后将obj合并到该元素,然后再次将其添加到数组的末尾
let state={items:[{key:333,val:Hi},{key:555,val:Iam}]}
设obj={filter:{refine:true}}
让add=(首字母,obj)=>{
let last=初始[初始长度-1]
设arr=[…初始].slice(0,-2)
return[…initial,{…last,…obj}]
}
state.items=add(state.items,obj)
console.log(状态)
和一些小助手
const lens = (key, fn) => obj => ({ ...obj, [key]: fn(obj[key]) });
const mapIndex = (index, fn) => arr => arr.map((it, i) => i === (index + arr.length) % arr.length ? fn(it) : it);
这很容易:
this.setState(lens("items", mapIndex(-1, it => ({ ...it, filter: { refine: true }}))));
你试了什么?这似乎是一项相当简单的任务。从数组中获取最后一个项目,然后向其添加过滤器
键。如何数组[array.length-1]
从数组
访问最后一个项目
?“我尝试了下面的一个”-看起来您应该再看一次JavaScript教程。“哪个处于状态”。。。所以你想以一种不变的方式来做吗?我猜这与React的状态有关,只是一个建议。而不是state.items[state.items.length-1]
,您可以尝试state.items.pop()
。这样可以避免再次切割。当然,它会改变状态。items
,但您无论如何都是在设置新状态,所以不会有太大的影响