我有一个由键值对组成的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"}
答案 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中的对象属性没有定义的顺序。不能保证在对象文字中定义它们的顺序将意味着其他任何地方。
答案 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)
不能保证Javascript对象中的顺序。您只需添加新的键值,例如obj.key3 = "value3";
,key3
就会在obj
上可用。
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)