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

时间:2017-10-21 03:40:40

标签: javascript jquery

当我在对象中实现基于字符串的数字作为键时,在呈现对象时,它将作为数字而不是字符串返回。这让我失望,因为我的原始数组被重新排序,然后我想生成一个基于数字的对象,该数字是数组行中的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"}

2 个答案:

答案 0 :(得分:2)

  

默认情况下,javascript通过数字有序列表重新排序我的对象键,而不是我告诉它在

中的顺序

对象属性未订购。有多种方法可以获取属性的列表或迭代,但对于大多数方法,顺序是依赖于实现的。但是,大多数当前浏览器将首先按升序迭代数字属性,然后按插入顺序迭代非数字属性。

如果您需要保证订单,那么您应该使用custom,如另一个答案所述,因为地图维护插入顺序,或继续使用您的数组来定义迭代顺序。

答案 1 :(得分:0)

您可以使用 Call<Example> call = apiService.getData(URL); call.enqueue(new Callback<Example>() { @Override public void onResponse(Call<Example> call, Response<Example> response) { Log.d(TAG, "response.body(): " + response.body().getExample()); } @Override public void onFailure(Call<Example> call, Throwable t) { // Log error here since request failed Log.e(TAG, t.toString()); } }); 按特定顺序存储属性

&#13;
&#13;
Map
&#13;
&#13;
&#13;