簡體   English   中英

如何在 lodash 中使用 orderBy 替換空值

[英]How to replace null values using orderBy in lodash

如何在 lodash 中使用orderby將空值正確替換為不同的值,例如字符串。

目前,這是我用字符串替換空值所做的工作。 我將使用單獨的foreach loop.GroupDate的空值替換為字符串,然后使用orderBy函數。

test.forEach((e, i) => {
    if (e.GroupDate === null) {
      test[i].GroupDate = i.toString();
    }
});

test = orderBy(test, [c => c.GroupDate, c => c.Index, c => c.Date], ['desc', 'asc']);

如果有更好的方法來替換 foreach 循環並將此條件添加到orderBy

我試過這個,但它不起作用:

let groupDateNumber = 0;

test = orderBy(test, [
    (c) => {
      if (c.GroupDate === null) {
        c.GroupDate = groupDateNumber.toString();
      }
      groupDateNumber++;
      return c.GroupDate, c => c.Index, c => c.Timestamp;
    }
], ['desc', 'asc']);

你的 iteratee 函數正在返回一個數組是正確的嗎? 我相信你想要的是

let groupDateNumber = 0;

test = orderBy(test, [
    (c) => {
      if (c.GroupDate === null) {
        c.GroupDate = groupDateNumber.toString();
      }
      groupDateNumber++;
      return c.GroupDate;
    },
    c => c.Index,
    c => c.Timestamp
], ['desc', 'asc']);

另一種方法是通過使用 lodash seq 方法_(value)以及maporderBy來做到這一點。 這應該使用惰性求值,所以它應該是有效的,盡管我不確定鏈接與 orderBy 和 sortBy 的效果如何。

test = _(test)
  .map((e, i) => {
    if (e.GroupDate === null) {
      e.GroupDate = i.toString();
    }
    return e;
  })
  .orderBy([c => c.GroupDate, c => c.Index, c => c.Date], ['desc', 'asc'])
  .value()

您可以使用函數數組作為第二個參數並檢查空值:

const textIfNull = '';

test = orderBy(test, [c => c.GroupDate || textIfNull, c => c.Index, c => c.Date], ['desc', 'asc']);

我為您創建了一個帶有示例的沙箱

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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