Как удалить элемент из массива значений ключей? - PullRequest
0 голосов
/ 02 января 2019

Я хочу удалить определенный элемент из массива, я получаю ключ элемента из ввода.Я хочу быть в состоянии удалить элемент, только зная ключ.

Это массив:

state ={
    splitAmount : [{
        "SplitAmount0": this.props.data.amount1
    }, {
        "SplitAmount1": this.props.data.amount2
    }, {
        "SplitAmount2": this.props.data.amount3
    }]
}

Функция удаления:

  removeSplitAmount(e) {
    console.log("remove",e.target.name)
    let array = [...this.state.splitAmount];
    let  index = this.state.splitAmount.IndexOf(p => p == e.target.name )
    if (index !== -1) {
        array.splice(index, 1);
        this.setState({splitAmount: array});
    }
}

Ответы [ 3 ]

0 голосов
/ 02 января 2019

Вы можете использовать метод .filter в массиве в сочетании с Object.keys, чтобы очистить функцию:

removeSplitAmount(e) {
    const newSplitAmount = this.state.splitAmount
      .filter(p => !Object.keys(p).includes(e.target.name));

    this.setState({ splitAmount: newSplitAmount });
}
0 голосов
/ 02 января 2019

Вы можете использовать от hasOwnProperty до filter нужных вам объектов.

removeSplitAmount(e) {
  const newSplitAmount = this.state.splitAmount
    .filter(x => !x.hasOwnProperty(e.target.name));

  this.setState({ splitAmount: newSplitAmount });
}
0 голосов
/ 02 января 2019

Как сказал Дмитрий, вы не можете сделать indexOf для массива объектов ... Мне было плохо, я не осознавал этого. Было бы полезно в этом случае: var beasts = ['ant', 'bison', 'camel', 'duck', 'bison'];

beasts.indexOf ( 'зубр')

В вашем случае вам лучше использовать метод .filter, как сказано в ответах выше, потому что вы ищете и объект с определенным свойством

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...