Javascript 在对象中指定自定义键时,会将其转换为数字
当我在一个对象中实现一个基于字符串的数字作为键时,当呈现该对象时,它将以数字而不是字符串的形式返回。这让我很恼火,因为我的原始数组被重新排序,然后我想根据数组行中的ID数字生成一个对象,但问题是,默认情况下,javascript按照数字顺序列表对我的对象键重新排序,而不是我告诉它的顺序Javascript 在对象中指定自定义键时,会将其转换为数字,javascript,jquery,Javascript,Jquery,当我在一个对象中实现一个基于字符串的数字作为键时,当呈现该对象时,它将以数字而不是字符串的形式返回。这让我很恼火,因为我的原始数组被重新排序,然后我想根据数组行中的ID数字生成一个对象,但问题是,默认情况下,javascript按照数字顺序列表对我的对象键重新排序,而不是我告诉它的顺序 var array = ['1','2','3'].reverse(); var obj = {}; $.each(array, (idx, item) => { obj[item.toString
var array = ['1','2','3'].reverse();
var obj = {};
$.each(array, (idx, item) => {
obj[item.toString()] = item;
});
console.log(array, obj);
回报是
(3) ["3", "2", "1"] {1: "1", 2: "2", 3: "3"}
而不是
(3) ["3", "2", "1"] {3: "3", 2: "2", 1: "1"}
但是,对于非数字类型的字符,此操作非常有效,示例如下:
var array = ['hi','tom','how'].reverse();
var obj = {};
$.each(array, (idx, item) => {
obj[item.toString()] = item;
});
console.log(array, obj);
如期返回
(3) ["how", "tom", "hi"] {how: "how", tom: "tom", hi: "hi"}
您可以使用
Map
按特定顺序存储属性
var数组=['1','2','3'].reverse();
var obj=新映射;
array.forEach((item,idx)=>{
对象集(item.toString(),item);
});
log([…obj.entries()]);
array.forEach((item,idx)=>{
控制台日志(对象获取(项))
});
控制台日志(obj)代码>您可以使用Map
按特定顺序存储属性
var数组=['1','2','3'].reverse();
var obj=新映射;
array.forEach((item,idx)=>{
对象集(item.toString(),item);
});
log([…obj.entries()]);
array.forEach((item,idx)=>{
控制台日志(对象获取(项))
});
控制台日志(obj)代码>
默认情况下,javascript按照数字顺序列表对对象键重新排序,而不是按照我告诉它的顺序
对象属性没有排序。获取属性列表或迭代属性有多种方法,但对于大多数方法,顺序取决于实现。但是,大多数当前浏览器将首先按升序遍历数值属性,然后按插入顺序遍历非数值属性
如果您想要保证顺序,那么应该使用另一个答案中解释的映射
,因为映射保持插入顺序,或者继续使用数组定义迭代顺序
默认情况下,javascript按照数字顺序列表对对象键重新排序,而不是按照我告诉它的顺序
对象属性没有排序。获取属性列表或迭代属性有多种方法,但对于大多数方法,顺序取决于实现。但是,大多数当前浏览器将首先按升序遍历数值属性,然后按插入顺序遍历非数值属性
如果您想要保证顺序,那么您应该使用另一个答案中解释的Map
,因为Map保持插入顺序,或者继续使用数组定义迭代顺序。console.log。。。请尝试console.log(Object.keys(obj))
-键应按顺序排列created@JaromandaX-数字键是例外,它们通常首先以数字顺序出现,然后以创建顺序出现非数字键。(我知道它们不是真正的数字,因为所有属性都有字符串名称,但出于这个目的,它们被视为数字。)无论如何,当一个人需要按特定顺序使用属性时,应该使用数组,而不是对象。@JaromandaX object.keys(obj)返回相同的…对象属性没有顺序,所以你不能依赖任何.P.S。我说的“numeric”是指“integers>=0”,即可以作为有效数组索引的数字。出于这些目的,像“1.5”
这样的键被视为非数值。console.log。。。请尝试console.log(Object.keys(obj))
-键应按顺序排列created@JaromandaX-数字键是例外,它们通常首先以数字顺序出现,然后以创建顺序出现非数字键。(我知道它们不是真正的数字,因为所有属性都有字符串名称,但出于这个目的,它们被视为数字。)无论如何,当一个人需要按特定顺序使用属性时,应该使用数组,而不是对象。@JaromandaX object.keys(obj)返回相同的…对象属性没有顺序,所以你不能依赖任何.P.S。我说的“numeric”是指“integers>=0”,即可以作为有效数组索引的数字。出于这些目的,像“1.5”
这样的键被视为非数值。