gpt4 book ai didi

javascript - 使用特定步骤打乱数组的某些元素

转载 作者:行者123 更新时间:2023-11-29 18:47:12 25 4
gpt4 key购买 nike

我需要用特定步骤打乱数组的某些元素。

我有这个对象数组:

[
{
"_id": "aze54aze",
"boosted": false
},
{
"_id": "94v2d9e3",
"boosted": false
},
{
"_id": "999f5a8az4",
"boosted": false
},
{
"_id": "e9d29a9g",
"boosted": true
},
{
"_id": "f8f2a9f6a",
"boosted": false
},
{
"_id": "pe55z8a",
"boosted": false
},
{
"_id": "pvazpd97",
"boosted": false
},
{
"_id": "ft8azefze",
"boosted": true
},
]

我希望提升的对象在数组中以两个对象之间的步长进行洗牌。为了不把它们都放在数组的开头,我需要将它们“隐藏”在数组中。

这意味着第一个增强对象将位于第一个位置,然后是两个普通对象,然后是第二个增强对象,然后是其他普通对象。

我可以使用 Lodash 内置函数来实现吗?

最佳答案

您可以使用native 来做到这一点 ES6 javascript 功能,如 filter , reduce方法和 spread syntax

首先,你应该分开boostednormal数组。然后创建一个新数组,其中第一个增强对象将位于第一个位置,然后是两个普通对象,然后是第二个增强对象,依此类推...

我用了splice方法remove来自 normal 的项目或 boosted array 在我将它们添加到我的结果数组之后。 为什么这样? 因为最后我需要 concat我结果的其余元素。

var arr = [ { "_id": "aze54aze", "boosted": false }, { "_id": "94v2d9e3", "boosted": false }, { "_id": "999f5a8az4", "boosted": false }, { "_id": "e9d29a9g", "boosted": true }, { "_id": "f8f2a9f6a", "boosted": false }, { "_id": "pe55z8a", "boosted": false }, { "_id": "pvazpd97", "boosted": false }, { "_id": "ft8azefze", "boosted": true }, ] 

var boosted = arr.filter(item => item.boosted);
var boosted_copy = boosted.slice();
var normal = arr.filter(item => !item.boosted);
var result = boosted.reduce((res, item, i) => {
res.push(boosted_copy.splice(0, 1)[0], ...normal.splice(0, i * 2 + 2));
return res;
}, []).concat(boosted_copy, normal);
console.log(result);

关于javascript - 使用特定步骤打乱数组的某些元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52950917/

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