在Javascript对象的特定位置插入键值对

时间:2019-03-06 06:32:45

标签: 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"}

5 个答案:

答案 0 :(得分:2)

对于在特定索引后添加键值,我们可以使用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"}

答案 1 :(得分:1)

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

Some good info

答案 2 :(得分:0)

在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中可以使用。您可能会考虑使用数组。

答案 3 :(得分:0)

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

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)

答案 4 :(得分:0)

对于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)