2014-12-10 2 views
4

Я получаю выход, который выглядит как этотпреобразование массива строк в значении ключа объект пары

var x = ["title: x_one", " description: 1", " value: 4"] 

где x[0] возвращает title: x_one

Какой строки. Я не могу прочитать свойство титула. Как бы преобразовать его в объект, чтобы в итоге я смог выполнить цикл через массив и прочитать такие свойства, как название, описание и значение.

Я пытаюсь сделать это с помощью JQuery

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

+0

Откуда Вы получить выход? Похоже, что он должен быть JSON, но он не отформатирован должным образом. – LavaSlider

+1

Используйте 'split (':')' для разделения значения на имя и значение свойства. – Barmar

+0

хорошо я получаю выход от нашего друга Google https://spreadsheets.google.com/feeds/list/1hAJKYmNsDym6DIQkhZAH8PBtMYndzu9yCLZ1bp_VKCo/od6/public/basic?gid=0&single=true&hl=en_US&alt=json – soum

ответ

10

Прокрутите массив, разделив значения на символ :. Затем используйте первую часть в качестве имени свойства, вторая - как значение, в объекте.

var obj = {}; 
for (var i = 0; i < x.length; i++) { 
    var split = x[i].split(':'); 
    obj[split[0].trim()] = split[1].trim(); 
} 
+1

Спасибо, человек. Вы ответили на несколько моих вопросов в прошлом, и те были правы на :-). Спасибо за вашу помощь и помощь в понимании понятий – soum

0

Предполагая, что у вас есть объект перед созданием этого массива, вам не нужно его преобразовывать ни в какие. Используя jQuery, вы можете получить значение и ключ.

$.each(obj, function(key, value) { 
    alert(key + ": " + value); 
}); 

Если это конечный результат, вы можете просто использовать String.prototype.split при прохождении цикла.

+3

Это массив, а не объект. Ключи будут просто индексом массива '0',' 1' и т. Д. – Barmar

2

Попробуйте эту функцию я уже тестировал

var a=new Array(); 
    for(var i=0;i<x.length;i++){ 
    var tmp=x[i].split(":") 
    a[tmp[0]]=tmp[1] 
    } 
+1

За исключением вашего неправильного использования 'new Array()', это похоже на мой ответ. – Barmar

0

Просто наткнулся на это. Вот еще одно решение для исходного массива OP.

var x = ["title: x_one", " description: 1", " value: 4"] 


function mapper(str) 
{ 
    var o = {}; 
    strArr = str.split(":"); 
    o[strArr[0].trim()] = strArr[1].trim(); 
    return o; 
} 


var resultArray = x.map(mapper); 
console.log(resultArray[0].title); 
console.log(resultArray[1].description); 
console.log(resultArray[2].value); 

fiddle

1

Более актуальной версии, которая использует некоторые новые язык

const splitStr = (x) => { 
    const y = x.split(':'); 
    return {[y[0].trim()]: y[1].trim()};  
} 

const objects = ["title: x_one", " description: 1", " value: 4"].map(splitStr) 

console.log(objects) 
+0

Хорошее использование функций Lambda (MOZ - Array Functions). Хотя новички и некоторые средние уровни могут неправильно использовать без хороших знаний и опыта других языков для своих Pro's & Con, даже для JS/JQ – GoldBishop

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