Javascript 如何使用JS在特定位置向对象添加新项
最初,我有这样一个目标 里面有更多的数据,我错过了Javascript 如何使用JS在特定位置向对象添加新项,javascript,for-loop,object,Javascript,For Loop,Object,最初,我有这样一个目标 里面有更多的数据,我错过了 "Citizens": [ { "_id": "6070be28c98d5a0ea88f131c", "id": 1, "name": "Karl", "city_
"Citizens": [
{
"_id": "6070be28c98d5a0ea88f131c",
"id": 1,
"name": "Karl",
"city_id": "1",
"groups": []
},
]
在这个循环中通过它之后
for(let i = 0; i < objTmp[0]["Citizens"].length; i++){
for(let j = 0; j < citiesAll[0]["Cities"].length; j++){
if(objTmp[0]["Citizens"][i].id == citiesAll[0]["Cities"][j].id) {
objTmp[0]["Citizens"][i].city = citiesAll[0]["Cities"][j];
}
}
}
]
问题
我如何才能将city添加到末尾而不是开始,如图所示?正如Roshan提到的,关键订单在JS中不可靠,不应该依赖。如果您需要维护密钥顺序,我建议使用地图 以下是所有这两种情况的示例(包括不可靠的对象路由): 1.作为对象 由于对象键没有固有的顺序,如果在浏览器控制台中运行并展开对象,这可能看起来不正确,但如果运行下面的代码段,您将在控制台中看到正确的预期顺序。要确保所需的顺序,请使用第2节中进一步说明的地图 1.1. 作为使用嵌套数组方法循环的对象
const objTmp=[{公民:[{身份证:6070be28c98d5a0ea88f131c”,身份证:1,姓名:“卡尔”,城市身份证:1,团体:[]}];
const citiesAll=[{城市:[{id:1,名称:“莫斯科”,数据:“10000000”}];
objTmp[0][“Citizens”].forEach((citizen,i)=>citiesAll[0][“Cities”].find(city=>city.id&&citizen.id&&city.id==citizen.id&&(objTmp[0][“Citizens”][i]={……citizen,city:{……city}]))
console.log(objTmp[0][“公民”][0])代码>我不同意提供对象键排序方法的其他答案
我的回答是:不要那样做。试图对JavaScript对象的键进行排序是一种糟糕的做法,而且是反语义的。阅读你的代码的人要么会感到困惑,要么会正确地认为它充满了bug
我完全认识到这些钥匙,但我认为你不应该依赖它
使用映射、元组或其他为具有顺序而构建的对象。对象属性没有顺序。它不像数组。它们确实有一个顺序,但并不总是强制执行。请参见:对象确实是无序的,但必须有一种方法将城市添加到末尾?没有一种方法将其添加到末尾。这是同一个目标,不管这个城市是在开始、结束还是在中间。现在就着手解决问题。请继续关注…如何使此构造在嵌套循环中工作?@Cooler cpu我已更新了我的解决方案,除了数组forEach()
方法循环外,还包括经典for
循环和for..of
循环的示例。请检查并尝试每种方法。请记住,贴图将可靠地保持顺序,而对象不会。为了测试映射解决方案(2.1、2.2和2.2),您需要在控制台中运行代码,因为StackOverflow目前不支持将映射数据记录到其内置控制台。我的答案是目前唯一的其他答案,我特别说过不要重新排序对象键,而是使用映射,我提供了具体的指导方针和示例,所以我不确定您所指的是其他哪些答案。
{
"city": {
"id": 1,
"name": "Moscow",
"data": "10000000"
},
"_id": "6070be28c98d5a0ea88f131c",
"id": 1,
"name": "Karl",
"city_id": "1",
"groups": []
},