2015-12-07 2 views
0
["name: edward, subjectId:1, remark:passed", 
"name: edward, subjectId:3, remark:passed", 
"name: Jamie, subject:1, remark:excellent"] 

Выше это перепутанный вывод, который у меня нет для управления. Я должен сопоставить его и очистить. Идеальный объект массива должен быть, как показано ниже:Групповое избыточное значение объекта в объекте массива

[{name:"edward",subjectId:1,3,remark:"passed},{name:"Jamie",subjectId:1,remark:"excellent"}] 

Но для меня это кажется невозможным, потому что он не имеет уникальный идентификатор для каждой записи. Я могу сравнить это замечание и сгруппировать его правильно, но что, если у него есть строка, вставленная не на ту же дату? Тогда моя логика испортилась. Любая мысль?

+0

Обеспечить скрипку. –

+0

Является ли «edward» одним и тем же человеком в обоих случаях? Если он есть, вы можете сохранить идентификатор объекта в массиве - 'subjectId: [1, 3]'? – Mottie

+0

Возможно ли, чтобы «edward» присутствовал в 2 разных строках с двумя разными субъектами, такими как 1,3, а также два разных замечания как «прошедшие» и «превосходные»? – vijayP

ответ

0

Попробуйте использовать Array.prototype.map(); String.prototype.replace() с RegExp/(\w+)(?=:|,|$)/g в соответствии с словами ":", "," или конец строки, заменить на строку с кавычками; JSON.parse()

var arr = ["name: edward, subjectId:1, remark:passed", 
 
    "name: edward, subjectId:3, remark:passed", 
 
    "name: Jamie, subject:1, remark:excellent" 
 
]; 
 

 
var res = arr.map(function(val) { 
 
    return JSON.parse("{" + val.replace(/(\w+)(?=:|,|$)/g, "\"$1\"") + "}") 
 
}); 
 

 
console.log(res); 
 

 
document.querySelector("pre").textContent = JSON.stringify(res, null, 2)
<pre></pre>

0

Ваш вклад настолько близок к JSON, это позор, вы должны бросить манипуляции со строками на него!

var input = [ 
    "name: edward, subjectId:1, remark:passed", 
    "name: edward, subjectId:3, remark:passed", 
    "name: Jamie, subject:1, remark:excellent" 
]; 

function makeJson(str) { // Deal with each of your input strings 
    function wrapKeyAndVal(str) { // Wrap the key and value pairs in double quotes 
     var key = str.split(':')[0].trim(); 
     var val = str.split(':')[1].trim(); 
     return '"' + key + '"' + ':' + '"' + val + '"'; 
    } 
    return str.split(',').map(wrapKeyAndVal).join(','); 
} 

input = input.map(makeJson); 

// Parse each string into an object 
var output = input.map(item => JSON.parse("{" + item + "}")) 

// You'll end up with an array of objects 
console.log(output); 
Смежные вопросы