我正在阅读复选框名称和值。如果有两个复选框,则部分将被执行,如果只有一个复选框,则 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]];
});
}
在上面的代码中,只有当有多个值时才会执行 if block ,并且它工作正常,因为我们有一个数组。
名称 = Spine
和 值 = Spine 值
但在下面的场景中:
这里的其他部分将从上面的代码片段中执行。但这里它返回一个错误,指出 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
中获取一个数组。不过,您可能需要处理 b
或 b.name
为 undefined
的情况。或者您可以使用更通用的 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/