Есть ли быстрый способ 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 или наоборот.

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": "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)

13
0