javascript将对象属性与其值混合
大家好,javascript将对象属性与其值混合,javascript,Javascript,大家好, Object {two: 2, one: 1, three: 3} 我想实现的是洗牌所有对象的属性,包括它们的值 对象: var numbers = { one : 1, two : 2, three : 3}; 结果: Object {two: 2, one: 1, three: 3} 或任何其他变化 我尝试过几种数组洗牌方法,但没有一种对我有效 对象是无序的。一些浏览器可能会按字母顺序对其键进行排序,但这超出了任何规范的范围,因为该规范称为无序
Object {two: 2, one: 1, three: 3}
我想实现的是洗牌所有对象的属性,包括它们的值
对象:
var numbers = { one : 1, two : 2, three : 3};
结果:
Object {two: 2, one: 1, three: 3}
或任何其他变化
我尝试过几种数组洗牌方法,但没有一种对我有效 对象是无序的。一些浏览器可能会按字母顺序对其键进行排序,但这超出了任何规范的范围,因为该规范称为无序
但你能做的是:
var keys = Object.keys(numbers);
// drop your preffered shuffle algorithm here
keys.sort(function(a,b) {return Math.random() - 0.5;});
// now you have random keys!
keys.forEach(function(k) {console.log(numbers[k]);});
对象是无序的。一些浏览器可能会按字母顺序对其键进行排序,但这超出了任何规范的范围,因为该规范称为无序
但你能做的是:
var keys = Object.keys(numbers);
// drop your preffered shuffle algorithm here
keys.sort(function(a,b) {return Math.random() - 0.5;});
// now you have random keys!
keys.forEach(function(k) {console.log(numbers[k]);});
从ECMAScript 2015(ES2015,又称ES6)开始,对象属性(以前没有):
- 添加P作为键的最后一个元素
- 添加P作为键的最后一个元素
- 添加P作为键的最后一个元素
let numbers = { one : 1, two : 2, three : 3};
numbers = Object.keys(numbers)
.map((key) => ({key, value: numbers[key]}))
.sort((a, b) => b.key.localeCompare(a.key))
.reduce((acc, e) => {
acc[e.key] = e.value;
return acc;
}, {});
console.log(JSON.stringify(numbers));
这是已排序的,不是无序排列,而是可以通过多种方式中的任意一种进行无序排列,如中所述
这可以在ES2015+JavaScript引擎上运行。我并不是说(以这种方式使用属性顺序)这是一件值得做的事情。:-)
你可能会说这有点像是对reduce
的滥用,但它让我把所有这些都保留在一个大表达式中。(你可能会进一步争辩说,这对我来说是一件愚蠢的事情。:-)从ECMAScript 2015(ES2015,又称ES6)开始,对象属性(以前没有):
- 添加P作为键的最后一个元素
- 添加P作为键的最后一个元素
- 添加P作为键的最后一个元素
let numbers = { one : 1, two : 2, three : 3};
numbers = Object.keys(numbers)
.map((key) => ({key, value: numbers[key]}))
.sort((a, b) => b.key.localeCompare(a.key))
.reduce((acc, e) => {
acc[e.key] = e.value;
return acc;
}, {});
console.log(JSON.stringify(numbers));
这是已排序的,不是无序排列,而是可以通过多种方式中的任意一种进行无序排列,如中所述
这可以在ES2015+JavaScript引擎上运行。我并不是说(以这种方式使用属性顺序)这是一件值得做的事情。:-)
你可能会说这有点像是对
reduce
的滥用,但它让我把所有这些都保留在一个大表达式中。(你可能会进一步争辩说,我这么做很愚蠢。:-)洗牌对象属性?为了什么目的?我的意思是:如果是为了可视化,那么就洗牌输出,而不是属性…它们在哪里并不重要(而且在JS顺序中也没有指定)。两个问题:1)你尝试过什么?2) 你为什么要这么做?我只是想知道是否有这种可能性。洗牌对象属性?为了什么目的?我的意思是:如果是为了可视化,那么就洗牌输出,而不是属性…它们在哪里并不重要(而且在JS顺序中也没有指定)。两个问题:1)你尝试过什么?2) 你为什么要这么做?我只是想知道是否有这种可能性。大多数引擎都不按字母顺序排序。几乎所有属性都使用属性添加到对象的顺序。不过,这是没有文件记录的(也不是很普遍)。正如你所说,根据规格,他们没有订单。依赖订单是个坏主意。:-)Oops——我习惯了PHP的rand
和MySQL的rand
,以至于我一直忘了JS的Math。random
是按顺序排列的。大多数引擎不按字母顺序排序。几乎所有属性都使用属性添加到对象的顺序。不过,这是没有文件记录的(也不是很普遍)。正如你所说,根据规格,他们没有订单。依赖订单是个坏主意。:-)Oops——我习惯了PHP的rand
和MySQL的rand
,以至于我一直忘记了JS的Math。random
是按顺序排列的。