Создать новый массив с удаленными значениями (React Native) - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть такой массив:

[
Object {
"hex": "#00b2b9",
"label": "text",
"value": "364",
},
Object {
"hex": "#50690e",
"label": "text",
"value": "354",
},
Object {
"hex": "#925fa3",
"label": "text",
"value": "355"
}]

У меня есть еще один массив с этим:

Array [
"355",
"356"
]

Я хочу создать первый массив, но без объектов, содержащих значения 355 и 356. Я пытался с .filter () ... но я новичок с JS & React Native: -)

Я пробовал некоторые вещи, но почти каждый раз, когда я воссоздаю свой массив только со значениями (я теряю объекты внутри) ...

Что я хочу сделать, это: Если я обнаружил 355 и 356 в своем первом массиве, я удаляю объекты с ними и воссоздаю свой массив с единственным оставшимся объектом (значение 364)

Я думал о чем-то таком: myFirstArray.filter (item => item.value! = mySecondArray.value), но это не удалось ...

Спасибо за помощь

Ответы [ 3 ]

0 голосов
/ 04 сентября 2018
var firstArray = [{
"hex": "#00b2b9",
"label": "text",
"value": "364",
},
{
"hex": "#50690e",
"label": "text",
"value": "354",
},
{
"hex": "#925fa3",
"label": "text",
"value": "355"
}]

var secondArray = [
"355",
"356"
]

var thirdArray = firstArray.filter(item => secondArray.includes(item.value))

console.log(thirdArray)
0 голосов
/ 04 сентября 2018

Предыдущие ответы включают многократное повторение массива вашего идентификатора.

Более производительным решением было бы сохранить идентификаторы в наборе, а затем использовать их в сочетании с фильтром для создания нового массива.

const arr = [
     {
    "hex": "#00b2b9",
    "label": "text",
    "value": "364",
    },
     ...,
     {
    "hex": "#925fa3",
    "label": "text",
    "value": "355"
    }];

const ids = ["354", "355"];

const idSet = new Set(ids);
const output = arr.filter(e => !idSet.has(e.value));
0 голосов
/ 04 сентября 2018

Вы почти на месте, просто используйте Array#includes(), чтобы определить, находится ли значение элемента во втором массиве:

myFirstArray.filter(item => !mySecondArray.includes(item.value))

let myFirstArray = [{
    "hex": "#00b2b9",
    "label": "text",
    "value": "364",
  },
  {
    "hex": "#50690e",
    "label": "text",
    "value": "354",
  },
  {
    "hex": "#925fa3",
    "label": "text",
    "value": "355"
  }
]

let mySecondArray = [
  "355",
  "356"
]

console.log(
  myFirstArray.filter(item => !mySecondArray.includes(item.value))
)
...