2013-04-11 90 views
0

需要帮助。 我有字符串等["wt=WLw","V5=9jCs","7W=71X","rZ=HRP9"](无限数量的对)将字符串切片并将其存储在新阵列中

我需要与一对的阵列等wT(作为索引),并WLw作为值,整个字符串(或更简单的wT作为位于index0,WLw作为索引1等等) 我想在JavaScript中做到这一点,但我不知道如何完成这项任务。

非常感谢您的帮助!

+3

你的字符串包含'[]'外括号吗?如果是这样,首先调用'JSON.parse()'获得一个数组,然后''.split()''=' – 2013-04-11 13:02:24

+0

上的每个元素。使用JSON.parse()并从我的字符串中获得每个字符的数组。这有什么用? – aleXela 2013-04-11 13:06:22

+0

什么是您的_exact原始字符串_包括其外部引号?如果它包含'[]',那么'JSON.parse('[“wt = WLw”,“V5 = 9jCs”,“7W = 71X”,“rZ = HRP9”]')'返回一个key =值对然后可以是'.split()'。 – 2013-04-11 13:11:36

回答

3

你不能有一个字符串作为数组中的索引,你想要的是一个对象。

所有你需要做的就是循环你的数组,将每个值分成2项(键和值),然后将它们添加到一个对象。

实施例:

// output is an object 
var output = {}; 
var source = ["wt=WLw","V5=9jCs","7W=71X","rZ=HRP9"]; 
for (var index = 0; index < source.length; index++) { 
    var kvpair = source[index].split("="); 
    output[kvpair[0]] = kvpair[1]; 
} 

如果你想数组的数组,则其几乎相同的过程,只是推动每一对到输出对象

// output is a multidimensional array 
var output = []; 
var source = ["wt=WLw","V5=9jCs","7W=71X","rZ=HRP9"]; 
for (var index = 0; index < source.length; index++) { 
    output.push(source[index].split("=")); 
} 

更新如果源是实际上是一个字符串,而不是一个数组,然后你将不得不做更多的分裂来使它工作

var output = {}; 
var sourceText = "[\"wt=WLw\",\"V5=9jCs\",\"7W=71X\",\"rZ=HRP9\"]"; 
// i have escaped the quotes in the above line purely to make my example work! 
var source = sourceText.replace(/[\[\]]/g,"").split(","); 
for (var index = 0; index < source.length; index++) { 
    var kvpair = source[index].split("="); 
    output[kvpair[0]] = kvpair[1]; 
} 

更新2

如果您想要的输出是一个数组的数组,而不是包含键值对,那么你就需要做一些像@limelights答案的对象。

对象与键值对:var myObject = { "key1": "value1", "key2": "value2" };

与上面的代码可以访问“值1”这样myObject["key1"]myObject.key1

数组的数组:var myArray = [ [ "key1", "value1"] ,[ "key2", "value2" ] ];

与此代码,你不能通过“钥匙”访问数据(没有循环遍历整个地段以便首先找到它)。在这种形式下,“key1”和“value1”实际上都是值。

得到“VALUE1”你会做myArray[0][1]或者你可以使用一个中介数组访问对:

var pair = myArray[0]; 
> pair == ["key1", "value1"] 
> pair[0] == "key1" 
> pair[1] == "value1" 

你可以在这两种类型的结果的使用for each循环

// array of arrays 
var data = [ [ "hello", "world"], ["goodbye", "world"]]; 

data.forEach(function(item) { 
    console.log(item[0]+" "+item[1]); 
}); 
> Hello World 
> Goodbye World 

// object (this one might not work very well though) 
var data = { "hello": "world", "goodbye": "world" }; 

Object.keys(data).forEach(function(key) { 
    console.log(key+" "+data[key]); 
}); 
> Hello World 
> Goodbye World 
+0

事情是我想运行槽数组使用foreach进行操作与数据。 – aleXela 2013-04-11 13:26:49

+0

在更新中您添加了,我不能放斜杠。我像之前写的那样得到了字符串。 – aleXela 2013-04-11 13:27:30

+0

我可以使用'output = []'而不是'output = {}'吗? – aleXela 2013-04-11 13:36:21

2

正常的for loop会在这里完美!

var list = ["wt=WLw","V5=9jCs","7W=71X","rZ=HRP9"]; 
var pairs = []; 
for(var i = 0; i < list.length; i++){ 
    pairs.push(list[i].split('=')); 
} 

这会给你一个对的数组,我假设你想要的。 否则只是摆脱外部阵列,并做list[i].split('=');

如果你想它把对象,即。不是阵列

var pairObject = {}; 
for(var i = 0; i < list.length; i++){ 
    var pair = list[i].split('='); 
    pairObject[pair[0]] = pair[1]; 
} 
+0

此时我更喜欢数组。但是对这两种变体都表示感谢 – aleXela 2013-04-11 13:28:16

相关问题