【发布时间】:2020-01-04 03:51:18
【问题描述】:
请考虑删除重复的问题标志。这不是一个重复的问题,因为它不是在询问如何修改字符串,而是解决了在将字符串方法正确应用于字符串时可能导致错误的错误。误解可能是由于没有阅读我用来说明问题的具体示例(从字符串中删除引号),但与该示例的具体内容无关。在所讨论的特定情况下,将任何字符串方法应用于任何字符串时,这是一个意外错误。谢谢。
(我知道如何截断或替换字符串,字符串方法在这里不起作用。我也知道如何从字符串中删除引号,这不是建议问题的重复。虽然我很感激帮助,但请仅在您回答时回答读过去我说我想删除引号的地方。我想知道为什么我在正确使用字符串方法时会出错)
我有一个包含数据集的数组。典型的集合(即数组元素)是包含用逗号分隔的数据对的字符串。所以第一个元素可能如下所示:
sets[0] = '"name":"dave","height":"tall","age":"old"'
每个元素都包含一个字符串,而不是一个数组(我已经通过为每个元素打印 typeof 来确认这一点)。
我处理每个元素以通过在逗号处拆分来形成其组成部分的数组:
let currentSet = sets[i].split(",");
因此,对于 sets[0] 示例,set[0] 将 currentSet 填充为:
currentSet = ['"name":"dave"', '"height":"tall"', '"age":"old"']
和
currentSet[0] = '"name":"dave"';
我现在想提取每个当前集合的“dave”部分并将其推送到一个新的结果数组中:
dat = currentSet[j].split(":")[1];
resArray.push(dat);
这按预期工作,我得到 '"dave"' 作为 resArray 中的一个新元素。
下一部分证明是困难的。我不想将“dave”(带有文字引号)推送到数组,而是将 dave(字符串中没有引号)推送到数组,而不是:
resArray = ['"dave"', '"tall"', '"old"']
我想要:
resArray = ['dave', 'tall', 'old']
我尝试使用 dat.slice dat.substring 和 dat.replace 来修改推送到数组的字符串,但都抛出错误(无法将字符串方法应用于 null)。
我并不是特别要求如何实现我想要的结果的解决方案(尽管我会欢迎我可能忽略的简洁解决方案),但我真的想了解为什么我似乎无法通过任何字符串方法处理 dat 并推送结果到一个数组。我应该再次强调,我已经使用 typeof 确认每个 dat 提取都是一个字符串。这让我发疯了。任何解释都将受到欢迎。
谢谢。
我处理每组起始数据的实际 javascript 行(带有切片示例):
for (var i = 0; i < sets.length; i++)
{
let currentSet = sets[i].split(",");
// e.g. sets[i] = '"name":"dave","height":"tall","age":"old"'
// e.g. currentSet = ['"name":"dave"', '"height":"tall"', '"age":"old"']
resArray[i] = [];
for (var j = 0; j < currentSet.length; j++)
{
dat = currentSet[j].split(":")[1];
resArray[i].push(dat.slice(1,dat.length-2)); // throws error
// resArray[i].push(dat) // works fine;
// resArray[i].push(typeof dat) // confirms dat type is string;
} // next subset j;
outArray[i] = resArray[i].join(",");
currentSet = null;
} // next sets i;
【问题讨论】:
-
为什么不使用 JavaScript 对象而不是发明的字符串语法?
-
无法将字符串方法应用于 null 给定您的代码无法重现 jsfiddle.net/6j4Lbuzp
-
您可以使用简单的正则表达式
resArray[i].push(dat.replace(/"/g, ''))替换引号 -
Nidhin - 没有。正如我所说,字符串方法不起作用,所以它不会重复,因为它提供了字符串方法。
-
这不是方法的问题,
dat不知何故未定义。可能您需要检查dat = currentSet[j].split(":")[1];是否始终返回正确的值
标签: javascript arrays