Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在lodash中使用orderBy替换空值_Javascript_Lodash - Fatal编程技术网

Javascript 如何在lodash中使用orderBy替换空值

Javascript 如何在lodash中使用orderBy替换空值,javascript,lodash,Javascript,Lodash,如何使用lodash中的orderby正确地将空值替换为不同的值,如字符串 目前,我正在用字符串替换空值。我将使用一个单独的foreach循环用字符串替换.GroupDate的空值,然后使用orderBy函数 test.forEach((e, i) => { if (e.GroupDate === null) { test[i].GroupDate = i.toString(); } }); test = orderBy(test, [c => c.Gr

如何使用lodash中的
orderby
正确地将空值替换为不同的值,如字符串

目前,我正在用字符串替换空值。我将使用一个单独的
foreach循环
用字符串替换
.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']);

您可以将函数数组用作第二个参数并检查空值:

const textIfNull = '';

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

我为您创建了一个示例。

您可以使用函数数组作为第二个参数并检查空值:

const textIfNull = '';

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

我为您创建了一个示例。

您的iteratee函数正在返回一个数组,对吗?我相信你想要的是

让groupDateNumber=0;
测试=订购人(测试[
(c) =>{
如果(c.GroupDate==null){
c、 GroupDate=groupDateNumber.toString();
}
groupDateNumber++;
返回c.GroupDate;
},
c=>c.指数,
c=>c.时间戳
],[desc',asc'];
另一种方法是使用lodash-seq方法
(value)
map
orderBy
。这应该使用惰性评估,因此应该是有效的,尽管我不确定链接与orderBy和sortBy的关系如何

test=(测试)
.map((e,i)=>{
如果(e.GroupDate==null){
e、 GroupDate=i.toString();
}
返回e;
})
.orderBy([c=>c.GroupDate,c=>c.Index,c=>c.Date],'desc','asc']))
.value()

您的iteratee函数正在返回一个数组,对吗?我相信你想要的是

让groupDateNumber=0;
测试=订购人(测试[
(c) =>{
如果(c.GroupDate==null){
c、 GroupDate=groupDateNumber.toString();
}
groupDateNumber++;
返回c.GroupDate;
},
c=>c.指数,
c=>c.时间戳
],[desc',asc'];
另一种方法是使用lodash-seq方法
(value)
map
orderBy
。这应该使用惰性评估,因此应该是有效的,尽管我不确定链接与orderBy和sortBy的关系如何

test=(测试)
.map((e,i)=>{
如果(e.GroupDate==null){
e、 GroupDate=i.toString();
}
返回e;
})
.orderBy([c=>c.GroupDate,c=>c.Index,c=>c.Date],'desc','asc']))
.value()

我不建议在对对象进行排序时更改对象。这并不是一个真正的优化,因为排序算法往往运行在
O(n*logn)
最佳情况下,有些算法运行在
O(n^2)
中,但如果输入量较低,它们可能会更好。因此,至少,您会不止一次地检查每个元素(
n*logn
平均较低的估计值)。一个简单的
forEach
是1。清洁阅读2。更容易操作我不建议在排序时更改对象。这并不是一个真正的优化,因为排序算法往往运行在
O(n*logn)
最佳情况下,有些算法运行在
O(n^2)
中,但如果输入量较低,它们可能会更好。因此,至少,您会不止一次地检查每个元素(
n*logn
平均较低的估计值)。一个简单的
forEach
是1。清洁阅读2。更容易操作如果您要直接变异元素,我建议使用
.each
/
.forEach
。它仍然返回经过的所有内容,但其意图更加明确
.map
通常不进行突变。是的,这是一个很好的观点,但我从lodash文档中认为forEach/each不是包装的,我没有检查过,但据我记忆所及,它应该是包装的。我确实记得,当我在其他地方看到它时,我很惊讶它居然起了作用。编辑:显然我记错了
.forEach
确实是不可链接的。我不确定之前看到的情况让我感到惊讶。我只是在一个节点控制台
([{a:1,b:2},{a:3,b:4}]).forEach(el=>el.a+=1.orderBy([c=>c.a,c=>c.b],'asc','desc']).value()
中尝试过,但得到一个错误“不是函数”。使用lodash“4.17.20”如果要直接变异元素,我建议使用
。each
/
。forEach
。它仍然返回经过的所有内容,但其意图更加明确
.map
通常不进行突变。是的,这是一个很好的观点,但我从lodash文档中认为forEach/each不是包装的,我没有检查过,但据我记忆所及,它应该是包装的。我确实记得,当我在其他地方看到它时,我很惊讶它居然起了作用。编辑:显然我记错了
.forEach
确实是不可链接的。我不确定之前看到的情况让我感到惊讶。我只是在一个节点控制台
([{a:1,b:2},{a:3,b:4}]).forEach(el=>el.a+=1.orderBy([c=>c.a,c=>c.b],'asc','desc']).value()
中尝试过,但得到一个错误“不是函数”。使用lodash“4.17.20”