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

标签 javascript jquery

我正在阅读复选框名称和值。如果有两个复选框,则部分将被执行,如果只有一个复选框,则 else block 将被执行。

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 block ,并且它工作正常,因为我们有一个数组。

名称 = Spine值 = Spine 值 但在下面的场景中:

enter image description here

这里的其他部分将从上面的代码片段中执行。但这里它返回一个错误,指出 b.name.map 不是一个函数

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

到目前为止在 else block 中尝试过的方法:

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);
});

最佳答案

您可以通过将 b.name 值与空数组连接来组合这两种情况:

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

这样,当 b.name 是字符串时以及它已经是数组时,您都会从 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);

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

关于javascript - 将字符串转换为键值对数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51148931/

相关文章:

jQuery 多次追加克隆

php - 表行 attr() 问题

javascript - 除单击的内容外,div 内的所有 anchor 都会淡出

javascript - 如何在airmode 和toolbar 模式之间切换summernote 编辑器?

javascript - SVG路径半圆中的圆 Angular

javascript - 文本字段和下拉组合框

javascript - 将第一个 img src 从已解析的 feed 传递到另一个 elem 的 bg img 属性

javascript - 向现有事件监听器添加功能

javascript - 如何使用 JavaScript/jquery 暂停或延迟动画

javascript - 通过 RGB 确定颜色亮度