【问题标题】:How to filter array of object by value React Redux lodash如何按值过滤对象数组React Redux lodash
【发布时间】:2019-09-13 22:28:35
【问题描述】:

我有一些愚蠢的问题 - 我不明白我的错误在哪里

我有减速器,看起来:

import startsWith from "lodash";

const arr = [{id: "55ae8f78-4563-4445-b75f-267fe02c00a8", name: "Licensed Car", price: "775.00", discount: "68%"},
{id: "7d30c1c1-dd02-49cd-8b02-d8c3ec301d70", name: "Handmade Mouse", price: "349.00", discount: "71%"},
{id: "5f383f37-d9b1-4494-ac2f-d1ecb72a78f3", name: "Licensed Shirt", price: "425.00", discount: "69%"},
{id: "5ae0de55-f7e6-4d59-bebd-9b215d327efb", name: "Intelligent Chips", price: "767.00", discount: "62%"},
{id: "231a1dc1-1cf8-4b5e-bc3a-9b23932492e8", name: "Refined Cheese", price: "367.00", discount: "80%"}]

const INITIAL_STATE = {
  time: undefined,
  products: arr
};

export default (state = INITIAL_STATE, { type, payload }) => {
  switch (type) {
    case "FILTER_BY_VALUE": {
      return {
        ...state,
        products: [
          ...state.products.filter(product =>
            startsWith(product.name.toLowerCase(), payload.toLowerCase())
          )
        ]
      };
    }
    default:
      return state;
  }
};

我也使用 lodash 方法“startsWith”

_.startsWith([string=''], [target], [position=0])

_.startsWith('abc', 'a');
// => true

_.startsWith('abc', 'b');
// => false

_.startsWith('abc', 'b', 1);
// => true

有了payload就可以了,我想过滤一个数组,只留下值名与payload相同或部分相同的元素。

如果有人知道不用 lodash 解决我的问题的另一种方法 - 请写下你的想法。

感谢您的回答!

【问题讨论】:

    标签: reactjs redux lodash


    【解决方案1】:

    好吧,vanilla JS 具有与 lodash 库相同的 startsWith 方法。

    case "FILTER_BY_VALUE": {
      return {
        ...state,
        products: [
          ...state.products.filter(product => product.name.toLowerCase().startsWith(payload.toLowerCase()))
        ]
      };
    }
    

    【讨论】:

    • @Anon 单击勾选按钮将问题标记为已回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-22
    • 2016-05-12
    • 1970-01-01
    相关资源
    最近更新 更多