我正在阅读复选框的名称和值。如果零件被执行,则有两个复选框;如果单个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]];
});
}
在上面的代码中,只有在有多个值的情况下,if块才会被执行,并且因为我们有一个数组,所以它可以正常工作。
name = Spine
和value = Spine Value
但在以下情况下:
其他部分将从上面的代码片段执行。但是这里返回了一个错误,说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);
});
答案 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
获得数组。但是,当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);
请注意,在这种情况下,返回的数组将具有最短数组的长度。