将字符串的数组转换为基于文本的数组或JSON
Conver array of sting to array or JSON based on text
在我的项目中,我被困在这个任务中。我有这样的字符串数组:
var tempArray = [];
tempArray[0]="key1 : value1";
tempArray[1]="key1 : value2";
tempArray[3]="key2 : value1";
tempArray[4]="key2 : value2";
tempArray[5]="key2 : value3";
现在我想要这样的结果:
"key1":"value1","value2"
"key2":"value1","value2","value3"
您可以使用JSON或数组,我只想在这个格式中得到结果。
您可以使用Array.prototype.requeste()来转换您的数组,但您需要:
var output = tempArray.reduce(function(result, item) {
var key = item.split(":")[0].trim();
var value = item.split(":")[1].trim();
if (result[key]) {
result[key].push(value);
} else {
result[key] = [value];
}
return result;
}, {});
您可以在此处使用reduce
以获得良好效果。
var out = tempArray.reduce(function (p, c) {
var arr = c.split(' : '), key = arr[0], value = arr[1];
p[key] = p[key] || [];
p[key].push(value);
return p;
}, {});
请注意,这将为您提供一个对象,其值为数组。你可以这样访问它们:
out.key1[0] // value1
演示
试试这个函数。。。我不知道是否有一个特定的函数,但我做了一个函数,可以做你想做的。。。
function getMultArray(temp) {
var newArray = {};
var key;
var oldValue = null;
var tempA = [];
var i = 0;
var j = 0;
$.each(temp, function(k, value) {
var newValue = value.split(" : ");
j++;
if (oldValue === newValue[0]) {
tempA.push(newValue[1]);
if (temp.length == j) {
newArray[oldValue] = tempA;
tempA = [];
}
} else {
if (i === 0) {
i = 1;
oldValue = newValue[0];
tempA.push(newValue[1]);
if (temp.length == 1) {
newArray[oldValue] = tempA;
tempA = [];
}
} else {
newArray[oldValue] = tempA;
tempA = [];
tempA.push(newValue[1]);
oldValue = newValue[0];
if (temp.length == j) {
newArray[oldValue] = tempA;
tempA = [];
}
}
}
});
return newArray;
}
var tempArray = [];
tempArray[0] = "key1 : value1";
tempArray[1] = "key1 : value2";
tempArray[2] = "key2 : value1";
tempArray[3] = "key2 : value2";
tempArray[4] = "key2 : value3";
var newArray = getMultArray(tempArray);
$.each(newArray, function(key, value) {
$.each(value, function(i, value) {
$("#result").html($("#result").html()+"<br/>"+key + "-" + value);
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id='result'></div>
尝试这个
(function() {
var tempArray = [];
tempArray[0] = "key1 : value1";
tempArray[1] = "key1 : value2";
tempArray[3] = "key2 : value1";
tempArray[4] = "key2 : value2";
tempArray[5] = "key2 : value3";
function parse() {
var _tempArr = {}
tempArray.forEach(function(item) {
var k = item.replace(/'s+/, "").split(":");
if (_tempArr[k[0]] !== undefined) {
_tempArr[k[0]].push(k[1]);
} else {
_tempArr[k[0]] = [];
_tempArr[k[0]].push(k[1]);
}
});
console.log(_tempArr);
}
parse();
})()
我建议将数据格式更改为更简洁的样式,只使用类似'key1'
的key
和类似'value1'
的value
,而不是类似"key1 : value1"
的组合字符串。
结果是一个对象,其中键作为属性,值作为数组中的元素。
var object = {};
function addValueWithKey(key, value) {
object[key] = object[key] || [];
object[key].push(value);
}
addValueWithKey('key1', 'value1');
addValueWithKey('key1', 'value2');
addValueWithKey('key2', 'value1');
addValueWithKey('key2', 'value2');
addValueWithKey('key2', 'value3');
document.write('<pre>' + JSON.stringify(object, 0, 4) + '</pre>');
相关文章:
- Javascript,有没有一种方法可以将数组写成没有逗号或空格的单个文本字符串
- 是否有任何方法可以使用jQuery替换在数组中定义值的文本
- 高亮显示与数组字符串一起使用时文本插件中断
- 使用Javascript使用数组检查文本框中的值
- 如何获取文本框组的值,并使用jquery将它们放入(key:Value)数组中
- JavaScript:将字符串数组转换为文本区域
- 如何放置ÅÄ和#214;在javascript数组中,然后将其与html文本进行比较
- 数组中的随机文本字符串
- 单击select'时将数组行回显到文本区域中;s选项
- 如何将数组文本框名称发送到 ajax
- 数组文本作为对象键
- 在窗体中动态添加数组文本框
- 如何在选中数组复选框的情况下获取数组文本框的验证
- 数组文本或字符串拆分
- 从数组文本中检索属性值
- 数组文本框与onchange事件
- Angular Js绑定带有静态索引的JSON数组文本框
- Javascript数组文本替换
- 数组文本到数字,找到匹配的值和排序
- 如何获取数组文本框中文本框的键(索引)值