Javascript 如何在lodash中使用orderBy替换空值
如何使用lodash中的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
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”