Создание массива объектов в Javascript, которые соответствуют строго определенному формату c - PullRequest
0 голосов
/ 01 августа 2020

Мне нужно создать массив объектов с очень конкретным c форматом:

        var tags = [
            { key: "Cat In the Hat", value: 26 },
            { key: "One Fish Two Fish", value: 19 },
            { key: "Green Eggs and Ham", value: 18 }
                    ]

У меня есть двумерный массив ключей (которые являются строками) и значений (целые числа):

           books[0][0] = "Cat in the Hat";
           books[1][0] = 26;
           books[0][1] = "One Fish Two Fish";
           books[1][1] = 19;
           books[0][2] = "Green Eggs and Ham";
           books[1][2] = 18;

Я пробовал перебирать массив books [] для вывода каждого элемента в виде строки, которая помещает весь элемент в кавычки. Я пробовал записывать в новый массив с помощью

'key : '+books[0][0]+', value: '+books[1][0];

, но «ключ» и «значение» обрабатываются как строки и поэтому помещаются в кавычки. Я пробовал сопоставить массив, но мне не удалось получить правильный синтаксис:

    tags = books.map( function( key ) {
    return key.map( function( value ) { 
        return value.map( value ); 
    } );
} )

Что дает "value.map" не является функцией. Я знаю, что должен быть способ сделать это, я подозреваю, что это способ array.map, но механика того, как массивы и объекты выплевывают данные, сложность отображения двухмерного массива и необходимость форматирования c потому что это делает мне голову.

Ответы [ 3 ]

1 голос
/ 01 августа 2020

Вы можете использовать map over books [0] для ключа и добавить значение books [1] в обратном вызове.

function createTags(books) {
    let tags = books[0].map( function(key, i){
        return {"key": key, "value": books[1][i]}        
    }.bind(this));
    return tags;
}
        
let books = [0, 1];
books[0] = [];
books[1] = [];

books[0].push("Cat in the Hat");
books[1].push(26);

books[0].push("One Fish Two Fish");
books[1].push(19);

books[0].push("Green Eggs and Ham");
books[1].push(18);

console.log( createTags(books) );
1 голос
/ 01 августа 2020

Думаю, это должно сработать:

{key: books [0] [0], value: books [1] [0]}

0 голосов
/ 01 августа 2020

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

const 
    books = [["Cat in the Hat", "One Fish Two Fish", "Green Eggs and Ham"], [26, 19, 18]],
    keys = ["key", "value"],
    result = books.reduce((r, a, i) => a.map((v, j) => ({ ...r[j], [keys[i]]: v })), []);

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