0

我有一些数据要清理。对于有问题的字段,我知道可能的值是什么,但该值存储在一个连接的字符串中,我需要它们在一个数组中。这是我想做的事情:

var valid_values = ['Foo', 'Bar', 'Baz'];
var raw_data = ['BarFoo','BazBar','FooBaz'];
desired_result = [['Bar','Foo'],['Baz','Bar'],['Foo','Baz']];

我不确定这叫什么,所以我希望这不是重复的。

4

2 回答 2

0

您可以遍历每个数据值,使用indexOfcontains搜索允许的字符串,并将成功的匹配项作为数组返回。

这是我在 jsFiddle的代码版本和工作示例:

var out = raw_data.map(function (raw) {
    return valid_values.filter(function (value) {
        return raw.contains(value);
    });
});

//out === [['Bar','Foo'],['Baz','Bar'],['Foo','Baz']];

我认为输出匹配顺序并不重要。

于 2013-04-14T02:47:36.167 回答
0

这是假设有关您的数据的一些事情:

  • 您需要将字符串拆分为 2 项对
  • 输入和术语区分大小写
  • 你不会处理空/不合格的输入(需要更多的边缘情况)

在这种情况下,你会想做这样的事情:

// for each item in the desired result, see if it's a match
// at the beginning of the string,
// then split on the string version of the valid value
function transform(input){
    for(i = 0; i < len; i++) {
      if (input.indexOf(valid_values[i]) === 0) {
          return [ valid_values[i], input.split(valid_values[i])[1] ];
      }
    }

    return [];
}

// to run on your input
var j = 0, raw_len = raw_data.length, desired_result = [];
for(; j < raw_len; j++) {
  desired_result.push(transform(raw_data[j]));
}

此代码非常特定于您提出的答案;它不涵盖许多边缘情况。

于 2013-04-14T02:38:54.383 回答