繁体   English   中英

在javascript对象的某个位置插入键值对

[英]Insert key value pair at certain position in an object of javascript

我有一个由键值对组成的 javascript 对象,我想在某个位置插入一个键值对,在下面的示例中,我想将它插入到第一个键值对之后。

var obj = {key1: "value1", key2: "value2"};

console.log(obj);// {key1: "value1", key2: "value2"}

obj.key3 = "value3";

console.log(obj);// {key1: "value1", key2: "value2", key3: "value3"}

为了在某​​个索引后添加键值,我们可以使用Object.entries()Object.fromEntries()

let obj = {key1: "value1", key2: "value2"};
let keyValues = Object.entries(obj); //convert object to keyValues ["key1", "value1"] ["key2", "value2"]
keyValues.splice(1,0, ["newKey","newValue"]); // insert key value at the index you want like 1.
let newObj = Object.fromEntries(keyValues) // convert key values to obj {key1: "value1", newKey: "newValue", key2: "value2"}

在 ES6+ 环境中,非数字属性按插入顺序迭代,先delete key2 ,然后在设置key3后重新添加:

 var obj = {key1: "value1", key2: "value2"}; const { key2 } = obj; delete obj.key2; obj.key3 = "value3"; obj.key2 = key2; console.log(obj);

尽管如此,这是一件非常奇怪的事情,并且不能保证在 ES5 中工作。 您可以考虑改用数组。

JavaScript 中的对象属性没有定义的顺序。 不能保证您在对象字面量中定义它们的顺序将意味着其他任何地方。

一些不错的信息

您可以为此创建一个函数并在Object.keys上使用reduce()

 var data = {key1: "value1", key2: "value2"}; function insertKey(key,value,obj,pos){ return Object.keys(obj).reduce((ac,a,i) => { if(i === pos) ac[key] = value; ac[a] = obj[a]; return ac; },{}) } data = insertKey('key3','value3',data,1); console.log(data)

对于 ES5

无法保证 Javascript 对象的顺序。 您只需添加新的键值,如obj.key3 = "value3"; 并且key3将在obj上可用。

对于 ES6


function insertKey(key,value,obj,pos){
  return Object.keys(obj).reduce((ac,a,i) => {
    if(i === pos) ac[key] = value;
    ac[a] = obj[a]; 
    return ac;
  },{})
}


data = insertKey('key3','value3',data,1);
console.log(data)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM