【问题标题】:How would one add items to the beginning of an array with Lodash?如何使用 Lodash 将项目添加到数组的开头?
【发布时间】:2020-07-02 13:00:32
【问题描述】:

我一直在寻找使用 lodash 将项目添加到数组开头的方法。不幸的是,除了 lodash concat (到数组的末尾) 之外,我似乎找不到任何东西。 docs 似乎也没有说什么。

我得到以下代码:

const [collection, setCollection] = useState({
  foo: [1, 2, 3]
});

const addToCollection = (key, items) => {
  setCollection(prevCollection => ({
   ...prevCollection,
   [key]: _.concat(prevCollection[key] || [], items)
  }));
};

但这会将所有项目连接到最后。 我不想每次都对它们进行排序,因为这会使用不必要的处理能力,我更愿意将它们添加到开头,因为 API 总是推送已经排序的项目

我将如何做到这一点:

addToCollection('foo', [4, 5, 6]);
console.log(collection['foo']) // [4, 5, 6, 1, 2, 3];

而不是现在发生的事情:

addToCollection('foo', [4, 5, 6]);
console.log(collection['foo']) // [1, 2, 3, 4, 5, 6];

【问题讨论】:

  • const arr = [1,2,3]; const update = [4,5,6]; arr.unshift(...update); console.log(arr);
  • 这也可以在没有 loadash 的情况下完成。

标签: javascript lodash


【解决方案1】:

尝试交换参数:

_.concat(items, prevCollection[key] || [])

【讨论】:

  • 哦,哎呀.. 如此简单的修复 - 这就像一个魅力哈哈
【解决方案2】:

或者 vanilla JS 也很简单:

Collection.unshift('addMe', var, 'otherString' )

https://www.w3schools.com/jsref/jsref_unshift.asp#:~:text=The%20unshift()%20method%20adds,use%20the%20push()%20method.

我知道你要的是 lodash,但我认为这也是一件需要注意的好事情 :)

编辑:

澄清一下,无论您是推送已定义的变量、字符串、数组、对象还是其他任何东西,这都是一样的:

let yourArray = [1,2,3];
let pushArray = [1,2,3,4];
let anotherArray = [7,8,9];
yourArray.unshift(pushArray, anotherArray);

将“pushArray”和“anotherArray”推到“yourArray”的开头,所以它的值如下所示:

[[1,2,3,4], [7,8,9], 1,2,3]

编码愉快!

【讨论】:

  • 你如何使用数组来做到这一点?你硬编码了 unshift 中的参数
猜你喜欢
  • 1970-01-01
  • 2010-09-28
  • 2011-08-12
  • 1970-01-01
  • 2021-04-05
  • 2010-10-23
  • 2013-06-05
  • 2014-12-29
  • 1970-01-01
相关资源
最近更新 更多