![](/img/trans.png)
[英]How to unshift or add to the beginning of arguments object in JavaScript
[英]How to add a property at the beginning of an object in javascript
我有
var obj = {'b': 2, 'c': 3};
我想在该对象的开头(而不是结尾)添加一个属性:
var obj = {'a': 1, 'b': 2, 'c': 3};
有没有干净的方法来做到这一点?
您还可以在 ES6 (ES2015+) 中使用Object.assign( )。
let obj = {'b': 2, 'c': 3};
const returnedTarget = Object.assign({a: 1}, obj);
// Object {a: 1, b: 2, c: 3}
这些天你可以在 ES6 (ES2015+) 中使用很酷的扩展运算符 (...),尝试以下操作:
const obj = {'b': 2, 'c': 3}; const startAdded = {'a':1 , ...obj}; console.log(startAdded); const endAdded = {...obj, 'd':4}; console.log(endAdded);
可能会帮助野外的人:)
最简单的方法是使用扩展运算符。
let obj = {'b': 2, 'c': 3};
let newObj = {'a': 1, ...obj};
JavaScript 对象是无序的。 没有开始也没有结束。 如果您想要订单,请使用数组。
var arr = [
{ key: 'b', value: 2 },
{ key: 'c', value: 3 }
];
然后,您可以使用unshift
添加到它的前面:
arr.unshift({ key: 'a', value: 1 });
var obj = {'b': 2, 'c': 3};
obj = Object.assign({a: 1}, obj);
console.log(obj); // {a: 1, b: 2, c: 3}
希望这可以帮助
对我有用的是使用临时对象按所需顺序存储项目。 例如:
var new_object = {};
new_object[name] = value; // The property we need at the start
for (var key in old_object) { // Looping through all values of the old object
new_object[key] = old_object[key];
delete old_object[key];
}
old_object = new_object; // Replacing the old object with the desired one
Javascript 可能不会在语言本身中指定属性的顺序,但至少在我的项目(也许是你的)中,它确实表现得好像它一样( JSON.stringify
,调试观察窗口等)。 我从未见过for...in
order 不是最初添加属性的顺序。 因此,对于我项目中的所有意图和目的,也许是您的项目,这是非常可预测的。
虽然这不会影响执行,但如果您想看到一个统一的列表,当不同项目的属性可能以不同的顺序添加时,这会很痛苦,这取决于对象的创建方式。 执行可能不是项目开发中唯一重要的事情。 快速目视检查对象的能力也可能很重要。
如果你已经spread
,如果你不介意另一个对象,我会使用它。 但是如果你没有spread
(就像在旧的谷歌应用程序脚本中一样),或者你需要保留原始对象,你可以这样做:
对象.js
// Insert Property
Object.defineProperty(
Object.prototype,
'insertProperty',
{
value: function(name, value, index){
// backup my properties
var backup = {};
// delete all properties after index
var propertyIndex = 0;
for(var propertyName in this) {
if(this.hasOwnProperty(propertyName) && propertyIndex++ >= index) {
backup[propertyName] = this[propertyName];
delete this[propertyName];
}
}
this[name] = value;
// restore all properties after index
for(var propertyName in backup) {
if(backup.hasOwnProperty(propertyName))
this[propertyName] = backup[propertyName];
}
return this; // same object; not a new object
},
enumerable: false,
});
用法
var obj = {'b': 2, 'c': 3};
obj.insertProperty('a',1,0); // {a:1, b:2, c:3}
笔记
index
将属性放置在您想要的任何位置。 0 把它放在前面。object prototype
添加方法,您当然可以将函数拉出并添加一个 obj 参数。 在我的项目中,向原型添加方法对我有帮助; 它不会伤害我。在某些情况下,您可能能够仅使用您知道它最终可能具有的所有属性按照您希望看到它们出现的顺序创建您的对象,然后,无需插入属性,只需设置该属性。
// creation
var a = {Id: null, foo: 'bar'};
// update later
if(!a.Id)
a.Id = '123';
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.