gpt4 book ai didi

javascript - "Segmentize"与 lodash 的集合

转载 作者:行者123 更新时间:2023-12-03 09:49:46 24 4
gpt4 key购买 nike

  • 我有一个集合col1

    var col1 = [1, 8, 9, 10, 2, 54, 7];
  • 我有另一个集合col2

    var col2 = [1, 8, 23, 9, 46, 10, 2, 54, 78, 7]

    ...我知道它包含 col1 的每个元素,以及一些其他元素

  • 我想获得这个:

    var col3 = [
    [1, 8],
    [9],
    [10, 2, 54],
    [7]
    ]

    col1col2“分割”、“分段”

为了简洁起见,我想使用 lodash 函数,但如果有人以普通 JS 的形式提供答案,我会接受答案,并将其转换为 lodash作为编辑。

注意:我使用整数来提高 SO 的可读性,但我的真实集合包含对象。
NB2:每个元素在两个集合中都是唯一的
NB3:两个集合共有的元素具有相同的顺序

最佳答案

我认为简单的 Javascript 算法会更短、更快、更容易理解:

var l = [],
col3 = [l],
i = 0;
for (var j=0; j<col2.length; j++)
if (col1[i] == col2[j])
l.push(col1[i++]);
else
col3.push(l = []);

同样的事情,不太简洁,使用 lodash 循环:

var col1Pointer = 0;
var segment = [];
var col3 = [];
col3.push(segment);

_.foreach(col2, function(col2Item) {
var col1Item = col1[col1Pointer];
if (col1Item == col2Item) {
col1Pointer++;
segment.push(col1Item);
} else {
segment = [];
col3.push(segment);
}
});

我想不出合适的纯 lodash 方式 - 只是没有合适的方法。但我们可以自己写一个:

_.mixin({
splitOn: function(arr, callback, thisArg) {
if (!arr.length) return [];
callback = _.callback(callbac, thisArg);
var seg = [],
res = [seg];
for (var i=0; i<arr.length; i++)
if (callback(arr[i], i, arr))
res.push(seg = [])
else
seg.push(arr[i]);
return res;
}
});

然后像这样使用它

var col3 = _.splitOn(col2, _.ary(_.partial(_.includes, col1), 1));

关于javascript - "Segmentize"与 lodash 的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30910816/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com