我在对象中嵌套了数组,我需要提取这些值,然后按字母顺序对它们进行排序,然后将其显示在表格中。
我正在使用localeCompare
方法,但它正在返回:
Cannot read property 'localeCompare' of null
说实话,我不确定我是否正确接近这一点。使用sort
,您可以将a
与b
进行比较,以按字母顺序对其进行排序。我很困惑如何比较a
和b
中数组的值。我使用sort
上的第一个tableData
来访问数组,并使用第二个sort
来比较我推送到数组的值clientRefArr
if(params.sorting().clientRef) {
var clientRefArr = [];
tableData.sort(function(a, b){
a.renewalUIs.forEach(function(data, i){
clientRefArr.push(data.patentUI.clientRef);
})
return clientRefArr.sort(function(a, b){
console.log(a.localeCompare(b))
// return a.localeCompare(b)
})
})
orderedData = tableData;
}
return orderedData;
问题
为什么错误Cannot read property 'localeCompare' of null
被退回?我是否完全错误地处理了这个问题?
//JSON
[
0: {
transRef: "IX1000013"
renewalProgress: 30
renewalUIs: [
0: {
patentUI: {
business: null
clientRef: P0101011 // this is the required value
}
renewalAttemptsMade: 1
renewalDueDate: 1514764740000
}
]
},
1: {
transRef: "IX100333"
renewalProgress: 55
renewalUIs: [
0: {
patentUI: {
business: null
clientRef: P0101011 // this is the required value
}
renewalAttemptsMade: 1
renewalDueDate: 1514764740000
},
1: {
patentUI: {
business: null
clientRef: P5551011 // this is the required value
}
renewalAttemptsMade: 3
renewalDueDate: 174834740000
}
]
}
]
答案 0 :(得分:1)
您可以为这两个部分采用默认值
(a || '').localeCompare(b || '')
用于将null
值或甚至所有falsy值排序到顶部。
使用给定数据的尝试(我更改了一些值,以获得一些排序)。
现在首先对内部数组renewalUIs
进行排序,然后使用第一个元素对外部数组进行排序。
var array = [{ transRef: "IX1000013", renewalProgress: 30, renewalUIs: [{ patentUI: { business: null, clientRef: "P9101011" }, renewalAttemptsMade: 1, renewalDueDate: 1514764740000 }] }, { transRef: "IX100333", renewalProgress: 55, renewalUIs: [{ patentUI: { business: null, clientRef: "P7101011" }, renewalAttemptsMade: 1, renewalDueDate: 1514764740000 }, { patentUI: { business: null, clientRef: "P5551011" }, renewalAttemptsMade: 3, renewalDueDate: 174834740000 }] }];
array.forEach(function (o) {
o.renewalUIs.sort(function (a, b) {
return a.patentUI.clientRef.localeCompare(b.patentUI.clientRef);
});
});
array.sort(function (a, b) {
return a.renewalUIs[0].patentUI.clientRef.localeCompare(b.renewalUIs[0].patentUI.clientRef);
});
console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 1 :(得分:0)
如果我的解释是正确的,那么首先将所有内容放在一个数组中然后对它进行排序就更容易了,只需使用第一个任务的循环和第二个任务的正常排序,嵌套的排序真的只是一个坏主意。
# A tibble: 224 x 3
# Groups: origin [?]
origin dest mean_time
<chr> <chr> <dbl>
1 EWR ALB 31.78708
2 EWR ANC 413.12500
3 EWR ATL 111.99385
4 EWR AUS 211.24765
5 EWR AVL 89.79681
6 EWR BDL 25.46602
7 EWR BNA 114.50915
8 EWR BOS 40.31275
9 EWR BQN 196.17288
10 EWR BTV 46.25734
# ... with 214 more rows
如果&#34; renewalUIs&#34;或&#34; patentUIs&#34;你不能迭代字典的密钥。