当我在对象中实现基于字符串的数字作为键时,在呈现对象时,它将作为数字而不是字符串返回。这让我失望,因为我的原始数组被重新排序,然后我想生成一个基于数字的对象,该数字是数组行中的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"}
答案 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());
}
});
按特定顺序存储属性
Map
&#13;