Есть ли быстрый способ ES6 сравнить массив элементов и ключ объекта и удалить несоответствующие элементы?

Я пытаюсь найти ярлык или единственную строку 9X_arrays кода, которая может активировать следующее:

У 9X_javascript меня есть массив selectedFields, состоящий из элементов:

selectedFields = [ "time", "age", "city" ]

У 9X_array меня есть объект valueProvided, состоящий из значений:

valueProvided = { "time": "2022-10-01", "visa": "onArrival", "age": 30, "city": "paris", "hotel": "Holiday" }

Я 9X_jsonarray хотел бы сравнить 2 поля и удалить все элементы 9X_ecmascript из valueProvided object, которых нет в массиве. Это означает, что 9X_es6 в этом случае элементы visa и hotel отсутствуют в 9X_bytearray selectedFields, поэтому я хотел бы удалить его из valueProvided, чтобы 9X_json-parsing мой окончательный результат выглядел примерно 9X_json-parsing так:

result = { "time": "2022-10-01",  "age": 30, "city": "paris" }

Я знаю, что я могу перебрать элементы 9X_ecmascript-2015 в массиве и удалить несоответствующий ключ 9X_.js из объекта, чтобы добиться этого, но я пытаюсь 9X_.js найти, есть ли какой-либо ярлык или способ 9X_json-parsing ES6 сделать это в одной строке или эффективно.

Я 9X_es6 нашел пару ответов, но во всех случаях они 9X_ecmascript-6 пытаются сравнить объект с другим объектом 9X_json или массив с другим массивом, но не перекрестный 9X_es6 подход для сравнения массива с объектом 9X_javascript или наоборот.

4
0
1
Общее количество ответов: 1

Ответ #1

Ответ на вопрос: Есть ли быстрый способ ES6 сравнить массив элементов и ключ объекта и удалить несоответствующие элементы?

Вы можете использовать Object.entries для получения записей 9X_ecmascript-2015 от valueProvided, filter их о том, находится ли ключ в selectedFields, а 9X_.js затем использовать Object.fromEntries для построения объекта 9X_ecmascript результата:

const selectedFields = ["time", "age", "city"]

const valueProvided = {
  "time": "2022-10-01",
  "visa": "onArrival",
  "age": 30,
  "city": "paris",
  "hotel": "Holiday"
}

const result = Object.fromEntries(
  Object.entries(valueProvided).filter(([k, v]) => selectedFields.includes(k))
)

console.log(result)

Как указал @NickParsons в комментариях, вы 9X_array можете дополнительно оптимизировать это 9X_object (пока все ключи в selectedFields существуют в valueProvided), создав 9X_es6 объект из mapping ключей в selectedFields в ключ , пара значений 9X_json-parsing из valueProvided:

const selectedFields = ["time", "age", "city"]

const valueProvided = {
  "time": "2022-10-01",
  "visa": "onArrival",
  "age": 30,
  "city": "paris",
  "hotel": "Holiday"
}

const result = Object.fromEntries(
  selectedFields.map(k => [k, valueProvided[k]])
)

console.log(result)

Если бы valueProvided был массивом, вам нужно было 9X_objects бы повторить это, используя map:

const selectedFields = ["time", "age", "city"]

const valueProvided = [{
    "time": "2022-10-01",
    "visa": "onArrival",
    "age": 30,
    "city": "paris",
    "hotel": "Holiday"
  },
  {
    "time": "2022-11-12",
    "visa": "preBooked",
    "age": 45,
    "city": "london",
    "hotel": "Business"
  }
]

const result = valueProvided.map(v => Object.fromEntries(
  Object.entries(v).filter(([k, v]) => selectedFields.includes(k))
  // or
  // selectedFields.map(k => [k, v[k]])
))

console.log(result)

13
0