Есть ли быстрый способ ES6 сравнить массив элементов и ключ объекта и удалить несоответствующие элементы?
Я пытаюсь найти ярлык или единственную строку 9X_arrays кода, которая может активировать следующее:
У 9X_javascript меня есть массив selectedFields
, состоящий из элементов:
selectedFields = [ "time", "age", "city" ]
У 9X_array меня есть объект valueProvided
, состоящий из значений:
valueProvided = { "time": "2023-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": "2023-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 или наоборот.
Ответ #1
Ответ на вопрос: Есть ли быстрый способ ES6 сравнить массив элементов и ключ объекта и удалить несоответствующие элементы?
Вы можете использовать Object.entries
для получения записей 9X_ecmascript-2015 от valueProvided
, filter
их о том, находится ли ключ в selectedFields
, а 9X_.js затем использовать Object.fromEntries
для построения объекта 9X_ecmascript результата:
const selectedFields = ["time", "age", "city"] const valueProvided = { "time": "2023-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": "2023-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": "2023-10-01", "visa": "onArrival", "age": 30, "city": "paris", "hotel": "Holiday" }, { "time": "2023-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)
-
3
-
1
-
2
-
3
-
3
-
4
-
8
-
4
-
5
-
5
-
3
-
12
-
2
-
4
-
6
-
4
-
3
-
2
-
3
-
3
-
7
-
14
-
3
-
4
-
5
-
3
-
3
-
3
-
3
-
2
-
6
-
5
-
7
-
2
-
1
-
2
-
3
-
1
-
2
-
5
-
4
-
3
-
6
-
5
-
3
-
1
-
1
-
12
-
3
-
17