簡體   English   中英

JavaScript 遍歷數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM