[英]JavaScript traversing through arrays
我在 15 年后嘗試使用 javascript,所以在這方面不是專業人士。 我完成了對數組的分組和排序。 需要幫助遍歷和設置結果中的值。
第 1 部分 - 輸入數據數組 -
var arr = [
{ id: 1, name: 'fryh', name1: 'ksdtfuy', group: '1208', DT: '2019-10-02T19:20' },
{ id: 2, name: 'fthy', name1: 'xdhftdx', group: '1209', DT: '2019-10-02T09:27' },
{ id: 3, name: 'qjkgjwer', name1: 'dhfdt', group: '1208', DT: '2019-10-02T09:24' },
{ id: 4, name: 'jlkke', name1: 'atth', group: '1208', DT: '2019-10-02T19:20' },
{ id: 5, name: 'gfhjm', name1: 'dryt', group: '1208', DT: '2019-10-02T09:28' },
{ id: 6, name: 'iuit', name1: 'xx', group: '1209', DT: '2019-10-02T09:24' },
];
想根據組對其進行分組,然后根據 DT 對其進行排序。 使用下面的代碼實現了這一點,結果是分組的。
function ReSeq(){
var grouped = {};
for (var i = 0; i < arr.length; i += 1) {
if(!grouped[arr[i].group]) {
grouped[arr[i].group] = [];
}
grouped[arr[i].group].push(arr[i]);
}
for (var group in grouped) {
grouped[group] = grouped[group].sort(sortByPosition);
}
console.log(grouped);
}
var sortByPosition = function(a, b) {
var dateA = new Date(a.position), dateB = new Date(b.position);
return dateA - dateB;
};
以下是控制台上打印的內容 - 問題是我如何遍歷分組和設置值。 示例我想在分組中設置 name1 列的值。 基本上我想給它序列所以名稱 1 中的第一個條目將是 1 第二個將是 2 ...所以需要遍歷輸出對象並在 name1 中設置值
{1208: Array(4), 1209: Array(2)}
1208: Array(4)
0: {id: 3, name: "qwer", name1: "xx", group: "1208", position: "2019-10-02T09:24"}
1: {id: 5, name: "qwe", name1: "xx", group: "1208", position: "2019-10-02T09:28"}
2: {id: 1, name: "qw", name1: "xx", group: "1208", position: "2019-10-02T19:20"}
3: {id: 4, name: "qw", name1: "xx", group: "1208", position: "2019-10-02T19:20"}
length: 4
__proto__: Array(0)
1209: Array(2)
0: {id: 6, name: "qwer", name1: "xx", group: "1209", position: "2019-10-02T09:24"}
1: {id: 2, name: "qwe", name1: "xx", group: "1209", position: "2019-10-02T09:27"}
length: 2
__proto__: Array(0)
__proto__: Object
有幾種方法可以做到這一點。 在這里, Array.forEach
(參見MDN )用於重估 .name1 和for (let x in [obj])
以遍歷對象條目:
// use Array.reduce to group const sortedAscendingAndGrouped = getArr() .sort((a, b) => new Date(a.DT) - new Date(b.DT)) .reduce((acc, val) => ({ ...acc, [val.group]: (acc[val.group] || []).concat(val) }), {}); // traverse sortedAscendingAndGrouped groups // and number the .name1 values, using // Array.forEach for (let entry in sortedAscendingAndGrouped) { sortedAscendingAndGrouped[entry] .forEach( (row, i) => row.name1 = (i+1) + "-" + row.name1); } console.log(sortedAscendingAndGrouped); function getArr() { return [{ id: 1, name: 'fryh', name1: 'ksdtfuy', group: '1208', DT: '2019-10-02T19:20' }, { id: 2, name: 'fthy', name1: 'xdhftdx', group: '1209', DT: '2019-10-02T09:27' }, { id: 3, name: 'qjkgjwer', name1: 'dhfdt', group: '1208', DT: '2019-10-02T09:24' }, { id: 4, name: 'jlkke', name1: 'atth', group: '1208', DT: '2019-10-02T19:20' }, { id: 5, name: 'gfhjm', name1: 'dryt', group: '1208', DT: '2019-10-02T09:28' }, { id: 6, name: 'iuit', name1: 'xx', group: '1209', DT: '2019-10-02T09:24' }, ]; }
.as-console-wrapper { top: 0; max-height: 100% !important; }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.