对于我可以做的array
:
array.push(array.shift())
var array = [0, 1, 2, 3, 4, 5];
array.push(array.shift())
console.log(array); // [1, 2, 3, 4, 5, 0]

如何对object
执行相同操作?
输入
var object = {0: 'Fiat', 1: 'Audi', 2: 'BMW', 3: 'Citroën'}
如何将{0: 'Fiat'}
移至object
预期输出:
{0: 'Audi', 1: 'BMW', 2: 'Citroën', 3: 'Fiat'}
答案 0 :(得分:4)
您可以使用以下方式
var object = {0: 'Fiat', 1: 'Audi', 2: 'BMW', 3: 'Citroën'};
var result = Object.keys(object).map(e => object[e]);
//console.log(result);
result.push(result.shift());
//console.log(result);
let ans = Object.assign({}, result);
console.log(ans);
答案 1 :(得分:2)
您可以使用给定的键将对象转换为数组的索引,应用移位并转换回对象。
var object = { 0: 'Fiat', 1: 'Audi', 4: 'BMW', 5: 'Citroën' },
array = Object.keys(object).reduce((r, k, i) => (r[i] = object[k], r), []);
array.push(array.shift());
console.log(Object.assign({}, array)); // { 0: "Audi", 1: "BMW", 2: "Citroën", 3: "Fiat" }
一种不同的方法,同时尊重钥匙。
var object = { 0: 'Fiat', 1: 'Audi', 4: 'BMW', 5: 'Citroën' },
keys = Object.keys(object);
result = Object.assign(...keys.map((k, i) => ({ [k]: object[keys[(i + 1) % keys.length]] })));
console.log(result); // { 0: "Audi", 1: "BMW", 4: "Citroën", 5: "Fiat" }
答案 2 :(得分:1)
对象的属性对它们可能出现的顺序没有任何保证,简明说明没有概念作为顺序。我认为您需要更多思考并找到另一种解决方案,而不依赖于属性顺序。
答案 3 :(得分:1)
您可以将对象转换为数组,对数组进行重新排序并将数组转换回对象:
function toObject(arr) {
var rv = {};
for (var i = 0; i < arr.length; ++i)
rv[i] = arr[i];
return rv;
}
function toArray(object) {
return Object.keys(object).map(function (key) { return object[key]; });
}
var object = {0: 'Fiat', 1: 'Audi', 2: 'BMW', 3: 'Citroën'}
var array = toArray(object);
array.push(array.shift());
object = toObject(array);
console.log(object);
&#13;
答案 4 :(得分:0)
您不应该依赖JavaScript中对象键的排序。它不是由标准定义的。根据定义,对象没有排序,因此对象没有“结束”。
,没有任何顺序,将对象的某个键“移动”在任何地方都没有意义。具有订单的数据结构是数组。
您的对象几乎类似于数组,因为它的所有键都是连续的数字,但它缺少lenght
属性。使用length
,您可以将其转换为Array.from(object)
的实际数组。
答案 5 :(得分:0)
教学:对象通常基于Hash table进行按键查找。 因此,这通常意味着您没有订单。
myObj[key] => find value by computing hash of key => returns value
答案 6 :(得分:0)
正如Suren所说,该对象不保证插入顺序。我建议采用另一种方法:
const o = {0: 'Fiat', 1: 'Audi', 2: 'BMW', 3: 'Citroën'};
const k = Object.keys(o);
k.push(k.shift());
const result = k.map((v, i) => ({[i]: o[v]}))
.reduce((acum, v) => Object.assign(acum, v), {});
这里的方法是创建和索引数组,应用逻辑(推送和移位),然后用map重新构建对象,然后用reduce将它们合并到一个对象中。我认为这可能会更短(只是减少),但我想将其分解为更清楚。