我在这个options
中有一堆select
,每个都有value
个像:
context|cow
context|test
thing|1
thing|5
thing|27
context|beans
循环遍历选项时,我想构建一个数组来检查是否存在密钥,如果不存在则生成密钥,然后附加值。然后是下一个循环,如果密钥存在,则添加下一个值,逗号分隔。
理想的输出是:
arr['context'] = 'cow,test,beans';
arr['thing'] = '1,5,27';
这是我到目前为止所拥有的,但这不是构建价值观的好策略。
function sift(select) {
vals = [];
$.each(select.options, function() {
var valArr = this.value.split('|');
var key = valArr[0];
var val = valArr[1];
if (typeof vals[key] === 'undefined') {
vals[key] = [];
}
vals[key].push(val);
});
console.log(vals);
}
答案 0 :(得分:1)
答案 1 :(得分:1)
function sift(select) {
var vals = {};//notice I made an object, not an array, this is to create an associative array
$.each(select.options, function() {
var valArr = this.value.split('|');
if (typeof vals[valArr[0]] === 'undefined') {
vals[valArr[0]] = '';
} else {
vals[valArr[0]] += ',';
}
vals[valArr[0]] += valArr[1];
});
}
答案 2 :(得分:1)
可扩展,可重用,封装的解决方案如何:
function MyOptions()
{
var _optionNames = [];
var _optionValues = [];
function _add(name, value)
{
var nameIndex = _optionNames.indexOf(name);
if (nameIndex < 0)
{
_optionNames.push(name);
var newValues = [];
newValues.push(value);
_optionValues.push(newValues);
}
else
{
var values = _optionValues[nameIndex];
values.push(value);
_optionValues[nameIndex] = values;
}
};
function _values(name)
{
var nameIndex = _optionNames.indexOf(name);
if (nameIndex < 0)
{
return [];
}
else
{
return _optionValues[nameIndex];
}
};
var public =
{
add: _add,
values: _values
};
return public;
}
用法:
var myOptions = MyOptions();
myOptions.add("context", "cow");
myOptions.add("context","test");
myOptions.add("thing","1");
myOptions.add("thing","5");
myOptions.add("thing","27");
myOptions.add("context","beans");
console.log(myOptions.values("context").join(","));
console.log(myOptions.values("thing").join(","));
答案 3 :(得分:0)
我想这很有效,但如果有人可以优化它,我很乐意看到。
function updateSiftUrl(select) { var
vals = {};
$.each(select.options, function() {
var valArr = this.value.split('|');
var key = valArr[0];
var val = valArr[1];
if (typeof vals[key] === 'undefined') {
vals[key] = val;
return;
}
vals[key] = vals[key] +','+ val;
});
console.log(vals);
}
答案 4 :(得分:0)
这样的事情对你有用吗?
$("select#yourselect").change(function(){
var optionArray =
$(":selected", $(this)).map(function(){
return $(this).val();
}).get().join(", ");
});
如果您选择了3个选项,则optionArray
应包含option1, option2, option3
之类的内容。
答案 5 :(得分:-1)
好吧,你不希望vals[key]
成为一个数组 - 你希望它是一个字符串。所以试着做
if (typeof vals[key] === 'undefined') {
vals[key] = ';
}
vals[key] = vals[key] + ',' + val;