拆分函数在JavaScript中变为异常

时间:2011-04-06 11:57:29

标签: javascript

这是我正在阅读的文件内容...

aaa 3333,bbb 5,ccc 10

我没有为keyvalue [2],[3],[4]和[5]定义。为什么会这样?

我实际上是先拆分,然后再根据空间进行拆分。

4 个答案:

答案 0 :(得分:6)

因为你先用逗号分割,所以item现在是'PrimeSuiteId 3333'。当您按空格拆分时,您只得到两个项目,因此第三个值(keyvalue [2])及以上是空的。


编辑:可能修复以使脚本的第二部分工作

交换

var items = contents.toString().split(',');

var items = contents.toString().replace(/,/,' ');

将简单地用原始字符串中的空格替换逗号,以便您的预期值数组匹配


另一个编辑:因为用逗号或空格分割更好(如在评论中)

var contents = f.read();
  Ti.API.info(contents);
  var items = contents.toString(); // changed to return complete string not split
  // removed for loop altogether
  var keyvalue = items.split(/,|\s/);  // changed to split by comma or space
  var AppointmentSearchDaysAfter = keyvalue[0];  
  var AppointmentSearchDaysAfterValue = keyvalue[1];
  var AppointmentSearchDaysBefore = keyvalue[2];  
  var AppointmentSearchDaysBeforeValue = keyvalue[3];
  var PrimeSuiteId = keyvalue[4];  
  var PrimeSuiteIdValue = keyvalue[5]; 

答案 1 :(得分:1)

从内容文件中的内容,您应该只能获取

的值
var AppointmentSearchDaysAfter = keyvalue[0];       
var AppointmentSearchDaysAfterValue = keyvalue[1]; 

逗号之间的每个数据条目只有一个空格

答案 2 :(得分:1)

分割功能正在正常,您希望它表现为异常

按空格分割后,数组中只会得到两个值。从哪里带来6个值!!!?

您将在下一次迭代中获得的其余值

答案 3 :(得分:1)

不是为每个项目声明单个变量,然后从内容字符串中加载它们,而是可以将整个项目减少到具有键/值对的对象:

var items = contents.split(',').reduce(function (acc, val) {
    var split = val.split(' ');
    return acc[split[0]] = split[1], acc;
}, {});

要测试值是什么,请尝试:

console.log(items.PrimeSuiteId); // outputs 3333
console.log(items.AppointmentSearchDaysBefore); // outputs 5
console.log(items.AppointmentSearchDaysAfter); // outputs 10