Javascript 在数组中添加/覆盖对象

Javascript 在数组中添加/覆盖对象,javascript,arrays,object,ecmascript-6,for-of-loop,Javascript,Arrays,Object,Ecmascript 6,For Of Loop,如果title属性存在,我试图覆盖数组中的对象,否则只需将其推送到数组中即可。我发现了两种方法,不知道哪一种是首选方法 性能并不是一个真正的问题,但我想知道是否可以改变,或者是否有更好的方法来做到这一点 在这段代码中,我使用for循环编辑原始数组: const数据=[ { 标题:“AAA”, 人物:['约翰','梅根',] },{ 标题:“BBB”, 人物:[“艾米丽”、“汤姆”] } ] //如果inputTitle不在任何数据的标题上,它将追加而不是覆盖 //例如,常量inputTitle

如果
title
属性存在,我试图覆盖数组中的对象,否则只需将其推送到数组中即可。我发现了两种方法,不知道哪一种是首选方法

性能并不是一个真正的问题,但我想知道是否可以改变,或者是否有更好的方法来做到这一点

在这段代码中,我使用for循环编辑原始数组:

const数据=[
{
标题:“AAA”,
人物:['约翰','梅根',]
},{
标题:“BBB”,
人物:[“艾米丽”、“汤姆”]
}
]
//如果inputTitle不在任何数据的标题上,它将追加而不是覆盖
//例如,常量inputTitle='CCC'
常量inputTitle='AAA'
const inputPeople=['Peter','Jane']
用于(数据的常量对象){
如果(对象标题===输入标题){
obj.people=输入人员
打破
}否则{
数据推送({
标题:输入标题,
人员:输入人员
})
打破
}
}

console.log(data)
如果只需要更新匹配的项,可能一个
forEach
就可以解决这个问题

const数据=[
{
标题:“AAA”,
人物:['约翰','梅根',]
},{
标题:“BBB”,
人物:[“艾米丽”、“汤姆”]
}
]
常量inputTitle='AAA'
const inputPeople=['Peter','Jane']
data.forEach(({title},index)=>title==inputTitle?数据[index].people=inputPeople:null)

console.log(data)
如果只需要更新匹配的项,可能一个
forEach
就可以解决这个问题

const数据=[
{
标题:“AAA”,
人物:['约翰','梅根',]
},{
标题:“BBB”,
人物:[“艾米丽”、“汤姆”]
}
]
常量inputTitle='AAA'
const inputPeople=['Peter','Jane']
data.forEach(({title},index)=>title==inputTitle?数据[index].people=inputPeople:null)
console.log(数据)
const数据=[
{
标题:“CCC”,
人物:[“约翰”、“梅根”]
},{
标题:“BBB”,
人物:[“艾米丽”、“汤姆”]
}
]
让newdata={title:'AAA',people:['Peter','Jane']}
data.find(c=>c.title==newdata.title)!==未定义?data.find(c=>c.title==newdata.title).people=newdata.people:data.push(newdata)
console.log(数据)
const数据=[
{
标题:“CCC”,
人物:[“约翰”、“梅根”]
},{
标题:“BBB”,
人物:[“艾米丽”、“汤姆”]
}
]
让newdata={title:'AAA',people:['Peter','Jane']}
data.find(c=>c.title==newdata.title)!==未定义?data.find(c=>c.title==newdata.title).people=newdata.people:data.push(newdata)

console.log(data)
如果这是一个常见的用例,您将在同一个数据结构上执行多次,那么最好使用一个由标题键控的普通对象,因为这样操作很简单。您仍然可以将该标题保留为您拥有的财产

const数据={
AAA:{
标题:“AAA”,
人物:['约翰','梅根',]
},
BBB:{
标题:“BBB”,
人物:[“艾米丽”、“汤姆”]
}
};
常数标题='AAA';
const people=['Peter','Jane'];
数据[title]={title,people};//是的,就是这么简单。。。

控制台日志(数据)如果这是一个常见的用例,您将在同一数据结构上执行多次,那么最好使用一个由标题键控的普通对象,因为这样的操作很简单。您仍然可以将该标题保留为您拥有的财产

const数据={
AAA:{
标题:“AAA”,
人物:['约翰','梅根',]
},
BBB:{
标题:“BBB”,
人物:[“艾米丽”、“汤姆”]
}
};
常数标题='AAA';
const people=['Peter','Jane'];
数据[title]={title,people};//是的,就是这么简单。。。

控制台日志(数据)是如果标题存在,则此功能有效,但如果标题不同,如说
CCC
,则应将其推入是如果标题存在,则此功能有效,但是如果标题不同,比如说
CCC
,那么它应该推到它那里,如果
title
存在,它也可以工作,但是如果它是一个新标题,例如
CCC
@lvaro,我想推,如果它是一个新标题,例如
title
存在,它也可以工作,但是如果它是一个新标题,例如
CCC
@lvaro现在看,当你有工作代码并要求最佳实践、代码风格、可变性或性能考虑因素时,这更适合当你有工作代码并要求最佳实践、代码风格、可变性或性能考虑因素时,这更适合
let newdata = {title: 'AAA',people: [ 'Peter', 'Jane']}
//Create new object 

data.find(c => c.title === newdata.title) !== undefined 
// if title data from new object is find in old
? data.find(c => c.title === newdata.title).people=newdata.people
// change data
 : data.push(newdata)
// in not push it as new