如何在javascript中的对象的开头添加属性

ced*_*vad 22 javascript object

我有

var obj = {'b': 2, 'c': 3};
Run Code Online (Sandbox Code Playgroud)

我想在该对象的开头(而不是最后)添加一个属性:

var obj = {'a': 1, 'b': 2, 'c': 3};
Run Code Online (Sandbox Code Playgroud)

有干净的方法吗?

Jus*_*tin 40

您也可以在ES6(ES2015 +)中使用Object.assign().

let obj = {'b': 2, 'c': 3};
Object.assign({a: 1}, obj);

// Object {a: 1, b: 2, c: 3}
Run Code Online (Sandbox Code Playgroud)

  • 此方法不会更改原始对象,然后需要提供新对象 (5认同)
  • 仅当键是字符串类型时才有效。如果键的类型为 Number 并且您尝试添加字符串键,那么它将始终添加在末尾,即 obj = {"1" : "test1","2" : "test2"} 和 Object.assign({" key1": "value1"}, obj) 将返回 {"1" : "test1","2" : "test2","key1": "value1"} 它不会将该新键放在开头。 (4认同)

Que*_*tin 11

JavaScript对象是无序的.没有开始或结束.如果需要订购,请使用数组.

var arr = [
    { key: 'b', value: 2 },
    { key: 'c', value: 3 }
];
Run Code Online (Sandbox Code Playgroud)

然后,您可以添加到它的前面unshift:

arr.unshift({ key: 'a', value: 1 });
Run Code Online (Sandbox Code Playgroud)


dar*_*mis 10

这些天,您可以在ES6(ES2015 +)中使用酷传播算子(...),请尝试以下方法:

const obj = {'b': 2, 'c': 3};
   
const startAdded = {'a':1 , ...obj};
console.log(startAdded);

const endAdded = {...obj, 'd':4};
console.log(endAdded);
Run Code Online (Sandbox Code Playgroud)

可能会在野外帮助某人:)


小智 6

最简单的方法是使用扩展运算符。

let obj = {'b': 2, 'c': 3};
let newObj = {'a': 1, ...obj};
Run Code Online (Sandbox Code Playgroud)


bbe*_*eny 5

这可以使用lodash合并函数来完成,如下所示:

var myObj = _.merge({ col1: 'col 1', col2: 'col 2'}, { col3: 'col 3', col4: 'col 4' });
Run Code Online (Sandbox Code Playgroud)

您的最终对象将如下所示:

{ col1: 'col 1', col2: 'col 2', col3: 'col 3', col4: 'col 4' }
Run Code Online (Sandbox Code Playgroud)

正如其他人所提到的,不能保证对象中键的顺序会保持不变,这取决于您对它的处理方式。但是,如果您将合并作为最后一步执行,则应该没问题。注意,'merge' 函数将产生一个全新的对象,它不会改变你传递给它的任何一个对象。