Как удалить элемент из массива с помощью _.set или его эквивалента - PullRequest
1 голос
/ 05 мая 2020

Как удалить элемент с помощью lodash / fp set или аналогичного метода.

Я пробовал

_.set({data:[1,2,3]},"data[1]", undefined)

, что приводит к {data:[1,undefined,3]}, где как Я хотел бы получить результат как {data:[1,3]}

, также пробовал unset, что приводит к {data:[1,empty,3]}

Ответы [ 2 ]

1 голос
/ 06 мая 2020

Вот чистое решение для вас. Единственное, что вам нужно изменить, это _.isEqual(idx, 1) для любого индекса, который вы хотите удалить, или даже изменить его и использовать массив, если вам нужно, используя _.includes([1, 5, 10], idx) вместо функциональности _.isEqual().

// Your idea:
_.set({data:[1,2,3]},"data[1]", undefined)

// Using a simple _.reject() function:
const newData = _.assign({}, myObj, {
  data: _.reject(myObj.data, (val, idx) => _.isEqual(idx, 1))
});
0 голосов
/ 05 мая 2020

Я решил это с помощью последовательности операций.

  1. использовал get для выборки массива по указанному пути.
  2. использовал slice для получения нарезанного массива до указанный индекс.
  3. используется slice для получения второго массива после указанного индекса.
  4. используется concat для объединения первого и второго массива.
  5. используется set для установки массив по указанному пути.
    const arrayData = get(path, state);
    if (arrayData && index < arrayData.length) {
      const firstSet = slice(0, payload.index, arrayData);
      console.log("array data after slice", arrayData);
      const secondSet = slice(payload.index + 1, arrayData.length, arrayData);

      const newState = set(
        path,
        concat(firstSet, secondSet),
        state
      );
    } else {
       return {...state}
    }
...