Javascript или Query - конвертировать ассоциативный массив в объект - PullRequest
0 голосов
/ 20 февраля 2020

Это простой вопрос, я не специалист по JS, каким бы то ни было образом, и искал, но не смог заставить работать какие-либо существующие примеры по Stackoverflow.

В основном у меня есть ассоциативный массив, и мне нужно чтобы преобразовать его в объект:

Пример:

var combinedproducts = [["Testing-1","test-1"],["Testing-2","test2"],["Testing-3","test3"]]

Нужно, чтобы это было:

var products = {
        // 'productid1':'Product Description One',
        'Testing-1':'test-1',
        'Testing-2':'test-2',
        'Testing-3':'test-3'
    }; 

Что лучше / проще способ сделать это? Я могу использовать обычные javascript или jquery.

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

Ответы [ 5 ]

4 голосов
/ 20 февраля 2020

Если у вас нет особых проблем с поддержкой, вы можете просто использовать Object.fromEntries, предполагая, что «test2» и «test3» на самом деле являются опечатками массива, а не предназначены для преобразования в test-2 и test-3 соответственно, как в примере вывода.

В противном случае вам необходимо применить к ним преобразование (в этом случае либо reduce, либо простое for или foreach, либо даже map может выполнить sh).

Помните, что, как упоминалось выше, Object.entries не имеет той же поддержки, что и другие решения. Например, имейте в виду, что он не будет работать в IE и Edge в целом, проверьте эту ссылку для получения дополнительной информации о совместимости .

var combinedproducts = [["Testing-1","test-1"],["Testing-2","test2"],["Testing-3","test3"]];

const products = Object.fromEntries(combinedproducts);
console.log(products);
4 голосов
/ 20 февраля 2020

Вы можете сделать это с помощью .reduce() в исходном массиве:

let object = combinedProducts.reduce((o, a) => (
  o[a[0]] = a[1],
  o
), {});

Для чего бы то ни было, исходный массив на самом деле не является «ассоциативным массивом» в каком-либо формальном смысле. JavaScript не имеет ассоциативного типа массива.

2 голосов
/ 20 февраля 2020

Вы можете использовать уменьшение массива. Внутри функции обратного вызова добавьте первый элемент внутреннего массива в качестве ключа и второй элемент в качестве значения

let data = [
  ["Testing-1", "test-1"],
  ["Testing-2", "test2"],
  ["Testing-3", "test3"]
];

let newData = data.reduce((acc, curr) => {
  acc[curr[0]] = curr[1]
  return acc;
}, {});
console.log(newData)
1 голос
/ 20 февраля 2020

Вы также можете использовать этот метод

const c = [["Testing-1","test-1"],["Testing-2","test2"],["Testing-3","test3"]];

obj =  c.reduce((acc, [ key, val ]) => Object.assign(acc, { [key]: val }), {});
               
console.log(obj)
0 голосов
/ 21 февраля 2020

Еще один альтернативный способ выполнения в одной строке с Object.assign и map.

var combinedproducts = [
  ["Testing-1", "test-1"],
  ["Testing-2", "test2"],
  ["Testing-3", "test3"]
];

const obj = Object.assign(
  {},
  ...combinedproducts.map(([key, value]) => ({ [key]: value }))
);

console.log(obj);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...