将字符串转换为键值对数组

时间:2018-07-03 07:34:04

标签: javascript jquery

我正在阅读复选框的名称和值。如果零件被执行,则有两个复选框;如果单个checkboox,则else块将被执行。

if (Array.isArray(b.name)) {
  b.options = b.name.map(function(v, i) {
    return [v, b.value[i]];
  });
} else {
  b.options = b.name.map(function(v, i) {
    return [v, b.value[i]];
  });
}

例如: enter image description here

在上面的代码中,只有在有多个值的情况下,if块才会被执行,并且因为我们有一个数组,所以它可以正常工作。

name = Spinevalue = Spine Value 但在以下情况下:

enter image description here

其他部分将从上面的代码片段执行。但是这里返回了一个错误,说b.name.map is not a function

如何将该字符串转换为类似于if块的数组。

在else块中尝试到现在为止:

b.options = $.each(function(v, i) {
  return [b.name, b.value];
});


$.each({name: b.name, value: b.value}, function(k, v) {
  b.options = (k + "" + v);
});

2 个答案:

答案 0 :(得分:1)

如果b.name具有length属性,则可以使用'call'

if(Array.isArray(b.name)){
   b.options = Array.prototype.map.call(b.name,function(v,i) { 
            return [v, b.value[i]]; 
   })
}else{
   b.options = Array.prototype.map.call(b.name,function(v,i) { 
            return [v, b.value[i]]; 
   })
}

答案 1 :(得分:1)

您可以通过将b.name值与一个空数组串联来合并这两种情况:

b.options = [].concat(b.name).map(function(v,i) { 
    return [v, b.value[i]]; 
});

这样,当是字符串并且已经是数组时,您将从b.name获得数组。但是,当bb.nameundefined时,您可能需要处理这种情况。或者您可以使用更通用的zip功能:

var zip = function(arr1, arr2) {
  var a = [].concat(arr1);
  var b = [].concat(arr2);
  var len = Math.min(a.length, b.length)

  return a.slice(0, len).map(function(item, i){
      return [a[i], b[i]];
  });
}

b.options = zip(b.name, b.value);

请注意,在这种情况下,返回的数组将具有最短数组的长度。