Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在对象中指定自定义键时,会将其转换为数字_Javascript_Jquery - Fatal编程技术网

Javascript 在对象中指定自定义键时,会将其转换为数字

Javascript 在对象中指定自定义键时,会将其转换为数字,javascript,jquery,Javascript,Jquery,当我在一个对象中实现一个基于字符串的数字作为键时,当呈现该对象时,它将以数字而不是字符串的形式返回。这让我很恼火,因为我的原始数组被重新排序,然后我想根据数组行中的ID数字生成一个对象,但问题是,默认情况下,javascript按照数字顺序列表对我的对象键重新排序,而不是我告诉它的顺序 var array = ['1','2','3'].reverse(); var obj = {}; $.each(array, (idx, item) => { obj[item.toString

当我在一个对象中实现一个基于字符串的数字作为键时,当呈现该对象时,它将以数字而不是字符串的形式返回。这让我很恼火,因为我的原始数组被重新排序,然后我想根据数组行中的ID数字生成一个对象,但问题是,默认情况下,javascript按照数字顺序列表对我的对象键重新排序,而不是我告诉它的顺序

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”
这样的键被视为非数值。