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

标签 javascript lodash

我需要按照特定步骤对数组的一些元素进行洗牌。

我有这个对象数组:

[
  {
    "_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 功能(如 filterreduce 方法和 spread syntax)来实现此目的。

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

我使用了splice方法来从正常增强数组中删除数组 将它们添加到结果数组后。 为什么会这样?因为最后我需要将剩余元素连接到我的结果。

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/

相关文章:

javascript - 如何使用 Laravel Mix 将 lodash debounce 添加到我的项目中

javascript - 无限滚动去抖以避免过多调用

javascript - 规避原产地政策的方法

javascript - Object.defineProperty get/set 闭包

javascript - Assets 已预编译,但应用程序仍会查找所有单独的 js 文件

JavaScript/Node.js : function returning another function based on parameters

javascript - 返回嵌套数组的前两个索引的更简单方法?

javascript - 带有 Lodash 的 TypeScript : _. map( ["123", "234 "], _.trim) 返回 boolean[]?

javascript - 找不到 Ruby 数组的 lodash.pull 函数

javascript - 如何在 Ajax 响应表中附加复选框