2016-08-11 3 views
0

Вот тест мокко в моей программе Javascript:Как разобрать JSON строку в массив в Javascript

it('displays all available currencies in drop down list',() => { 
    return invoiceEditPage.details.currencyDropDown.dropDown.waitForEnabled() 
    .then(() => invoiceEditPage.details.currencyDropDown.click()) 
    .then(() => getEnabledCurrencies(tenantUsers.admin.authUser)) 
    .then((listOfCurrencies) => console.log(listOfCurrencies["name"].split(","))) 
    //.then((listOfCurrencies) => this.getCurrencyFromJSON(listOfCurrencies)) 
    //.then(() => console.log(invoiceEditPage.details.currencyDropDown.dropDownContents)) 
    //.then((listOfCurrencies) => assert.strictEqual(listOfCurrencies, invoiceEditPage.details.currencyDropDown.dropDownContents)) 
    .then(() => invoiceEditPage.details.currencyDropDown.dropDownMask.click()); 
}); 

Если я просто использовать линию

.then((listOfCurrencies) => console.log(listOfCurrencies)) 

, то я могу видеть строку JSON является распечатаны, как-то вроде этого:

[ { displayText: 'USD$', 
name: 'US Dollar', 
symbol: 'USD$' }, 

т.д.

Я хотел бы получить строковое массив, содержащий имена всех объектов JSON, ie. ["US Dollar", "Canadian Dollar", "Australian Dollar"].

Однако, используя линию у меня выше, он утверждает:

"undefined: Cannot read property 'split' of undefined".

Если я пытаюсь JSON. parse(), я получаю Неожиданный токен o, поэтому я знаю, что «listOfCurrencies» уже является строкой. Что происходит?

Благодаря

+1

'listOfCurrencies' является массивом, так что вы не можете сделать' listOfCurrencies [ «имя»] ' , Вы можете сделать 'listOfCurrencies [index] [" name "]'. Вам нужно выполнить итерацию по массиву или использовать функцию «map». – Kyriakos

+0

Я считаю, что когда я пытался раньше, он жаловался, если я попытался индексировать в listOfCurrencies, потому что считал, что это не массив. –

ответ

3

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

.then((listOfCurrencies) =>  
    console.log(listOfCurrencies.map(currency => currency.name)); 
); 
+0

Это прекрасно работает. Благодаря! –

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