2016-12-29 2 views
0

У меня есть эта функция:Возвращения массива объектов

buildDeck =() => { 
    let suit = ['C', 'D', 'H', 'S']; 
    let rank = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]; 
    let deck = []; 
    for (var i=0; i < rank.length; i++){ 
     for (var k=0; k < suit.length; k++){ 
     deck.push(rank[i] + suit[k]) 
     } 
    }; 
    return deck; 
    } 

это возвращает мне массив как ['2C', '4D', etc] Я хотел бы, чтобы это вернуть мне массив объектов, чтобы внутри каждой из них: костюма: «C ', rank: 4, например Как преобразовать массив строк в массив объектов, где rank и suit являются свойствами внутри каждого объекта?

+3

'deck.push ({костюм: костюм [к], ранг: ранг [я]})' – haim770

+2

* "Как я могу преобразовать массив строк в массив объектов ... »* Не надо. Создайте массив объектов в первую очередь. –

ответ

2

Попробуйте

buildDeck =() => { 
    let suit = ['C', 'D', 'H', 'S']; 
    let rank = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]; 
    let deck = []; 
    for (var i=0; i < rank.length; i++){ 
     for (var k=0; k < suit.length; k++){ 
     deck.push({ rank: rank[i], suit: suit[k]}) 
     } 
    }; 
    return deck; 
} 
0

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

var buildDeck = deck => 
 
     [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14].forEach(rank => 
 
      ['C', 'D', 'H', 'S'].forEach(suit => 
 
       deck.push({rank, suit}))), 
 
    deck = []; 
 

 
buildDeck(deck) 
 
console.log(deck);
.as-console-wrapper { max-height: 100% !important; top: 0; }

Или использовать генератор

function* buildDeck() { 
 
    for (let rank of [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]) { 
 
     for (let suit of ['C', 'D', 'H', 'S']) { 
 
      yield {rank, suit}; 
 
     }; 
 
    }; 
 
} 
 

 
var deck = [...buildDeck()]; 
 
console.log(deck);
.as-console-wrapper { max-height: 100% !important; top: 0; }

+0

Полностью нечитаемый код, дорогая. Я думаю, он искал быстрое, простое решение. –

+1

Похож на интересное решение. Это похоже на «умное» решение, и, вероятно, было бы сложно прочитать для всех, кто должен спросить, как это сделать в первую очередь, но, глядя на него, это на самом деле довольно круто. –

0

Выполнить два вложенных карты над костюмами и рангов, построение вложенного массива маленьких костюмных объектов/ранга , затем сгладить с concat(....

const buildDeck =() => { 
 
    let suits = ['C', 'D', 'H', 'S']; 
 
    let ranks = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]; 
 

 
    return [].concat(...suits.map(suit => ranks.map(rank =>({suit, rank})))); 
 
} 
 

 
console.log(buildDeck());

+1

хорошая идея с concat, чтобы сгладить массивы. –

Смежные вопросы