Javascript 如果将项目放入数组并进行排序,则确定该项目的潜在索引。
它能比克隆数组、推送项目和排序更快吗 我有一个Javascript 如果将项目放入数组并进行排序,则确定该项目的潜在索引。,javascript,arrays,sorting,ecmascript-6,lodash,Javascript,Arrays,Sorting,Ecmascript 6,Lodash,它能比克隆数组、推送项目和排序更快吗 我有一个项目数组,还有一个项目,它不是数组的一部分: let array = [ {name: 'Foo'}, {name: 'Bar'}, {name: 'Quux}, ] let item = {name: 'Baz'} 数组按字母顺序排序: array = _.sortBy(array, 'name') 与vanilla JS相同: function compare ({name: a}, {name: b}) { return
项目数组
,还有一个项目
,它不是数组的一部分:
let array = [
{name: 'Foo'},
{name: 'Bar'},
{name: 'Quux},
]
let item = {name: 'Baz'}
数组按字母顺序排序:
array = _.sortBy(array, 'name')
与vanilla JS相同:
function compare ({name: a}, {name: b}) {
return (
a < b ? -1 :
a > b ? 1 :
0
)
}
array.sort(compare)
但这似乎不是最优的
在保持代码简洁易读的同时,有没有一种方法可以有效地做到这一点。没有像(让i;i>array.length;i++){}这样难以理解的东西。洛达斯连锁店是理想的选择
var index=0;
while(compare(array[index],item)>0) index++;
if(index===array.length) index=-1;
在行动中:
let数组=[
{name:'Foo'},
{name:'Bar'},
{name:'quox'},
].排序(比较);
让item={name:'Baz'};
函数比较({name:a},{name:b}){
返回(
ab?1:
0
)
}
var指数=0;
而(比较(数组[index],item)>0)index++;
如果(index==array.length)index=-1;
控制台日志(索引)代码>
在行动中:
let数组=[
{name:'Foo'},
{name:'Bar'},
{name:'quox'},
].排序(比较);
让item={name:'Baz'};
函数比较({name:a},{name:b}){
返回(
ab?1:
0
)
}
var指数=0;
而(比较(数组[index],item)>0)index++;
如果(index==array.length)index=-1;
控制台日志(索引)
假设数组
已排序,那么我们可以使用来获取索引
var index = _.sortedIndexBy(array, item, 'name');
let数组=[
{name:'Bar'},
{name:'Foo'},
{name:'quox'},
];
让item={name:'Baz'};
var index=uu.sortedIndexBy(数组,项,'name');
控制台日志(索引)代码>
假设数组
已排序,那么我们可以使用来获取索引
var index = _.sortedIndexBy(array, item, 'name');
let数组=[
{name:'Bar'},
{name:'Foo'},
{name:'quox'},
];
让item={name:'Baz'};
var index=uu.sortedIndexBy(数组,项,'name');
控制台日志(索引)代码>
在添加新元素之前,输入数组是否已排序?然后,您需要做的就是在现有数组上循环,并检查新项何时比当前项“大”,此时您可以打破循环…在添加新元素之前,输入数组是否已排序?然后,您需要做的就是在现有阵列上循环,并检查新项目何时比当前项目“更大”,此时您可以打破循环…很好!这取决于数组已经排序的想法,对吗?如果我使用lodash进行排序而手头没有比较
,这个条件行得通吗:array[index].name>item.name
。没有while(数组[index].name比较
,这个条件行得通吗:array[index].name>item.name
。没有while(数组[index].name