Преобразовать массив строк в объект с тем же ключом / значением - PullRequest
0 голосов
/ 15 апреля 2020

Как мне преобразовать ["one","two","three"] в {one:"one", two:"two", three:"three"}

import stringArray from './a.js';

class b {
 hashmap = stringArray// convert this into Object here inline.
}

Перед тем, как прыгнуть, я знаю, как этого добиться, скажем, в constructor () с трюками типа forEach, для в l oop и др c. Существует ли простой однострочный код для достижения этого в свойстве класса, а не внутри функции.

Ответы [ 4 ]

0 голосов
/ 15 апреля 2020

Loda sh имеет функцию _.keyBy(), которая создает объект из массива путем генерации ключей из значений через предоставленную функцию (iteratee). Итератор по умолчанию - _.identity(), который возвращает значение.

const arr = ["one","two","three"];

const obj = _.keyBy(arr);

console.log(obj);
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.15/lodash.min.js"></script>
0 голосов
/ 15 апреля 2020

Лода sh

Можно использовать _.zipObject. Он принимает два массива - один для ключей, другой для значений, но если вы просто используете один и тот же массив дважды, вы получите совпадающие пары:

const arr = ["one","two","three"];

const obj = _.zipObject(arr, arr);
console.log(obj);
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.15/lodash.min.js"></script>

Обычный JavaScript

Вы можете использовать Object.fromEntries, чтобы сделать то же самое. Он работает с массивом пар ключ-значение, поэтому вам придется преобразовать его в следующее:

const arr = ["one","two","three"];

const matchingKeyValuePairs = arr.map(x => [x, x]);

const obj = Object.fromEntries(matchingKeyValuePairs);
console.log(obj);

Также вы можете использовать Array#reduce для создания объекта с вычисляемым именем свойства:

const arr = ["one","two","three"];

const obj = arr.reduce((acc, item) => ({...acc, [item]: item}), {});
console.log(obj);
0 голосов
/ 15 апреля 2020
data = ["one","two","three"];
data = data.map(e => [e,e]) // keyvalue pairs [["one","one"],["two","two"],["three","three"]]
data = Object.fromEntries(data); // {"one":"one","two":"two","three":"three"}

map преобразует каждый элемент вашего входного массива в структуру, которую вы хотите.

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

Object.froEntries преобразует список пары ключ-значение в Object

Это также можно сделать с простым старым значением для l oop

data = ["one","two","three"];
obj = {};
for(let i = 0; i < data.length ; i++){
   obj[data[i]] = data[i];
}

0 голосов
/ 15 апреля 2020

Пожалуйста, попробуйте вот так

const arr =["one","two","three"]

let obj ={}
arr.forEach(item=> obj[item] = item)
...