Javascript 动态构建数组,附加值
在这个Javascript 动态构建数组,附加值,javascript,jquery,arrays,Javascript,Jquery,Arrays,在这个select中,我有一系列选项,每个选项都有值如下: context|cow context|test thing|1 thing|5 thing|27 context|beans 在循环遍历选项时,我想构建一个数组,检查键是否存在,如果不存在,则生成键,然后附加值。然后在下一个循环中,如果键存在,则添加下一个值,逗号分隔 理想的输出是: arr['context'] = 'cow,test,beans'; arr['thing'] = '1,5,27'; 这是我到目前为止得到的,但
select
中,我有一系列选项
,每个选项都有值
如下:
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);
}
我想这是可行的,但如果有人能优化它,我很乐意看到
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);
}
嗯,您不希望
vals[key]
成为一个数组,而是希望它成为一个字符串。所以试着去做吧
if (typeof vals[key] === 'undefined') {
vals[key] = ';
}
vals[key] = vals[key] + ',' + val;
你喜欢这个工作吗
$("select#yourselect").change(function(){
var optionArray =
$(":selected", $(this)).map(function(){
return $(this).val();
}).get().join(", ");
});
如果您选择了3个选项,
optionArray
应该包含类似于option1、option2、option3的内容
vals=[];
到
下面是一个演示:一个可扩展、可重用、封装的解决方案如何:
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;
}
工作示例:您最终想做什么?我的直觉是有更好的方法。@mblase75好的观点,我通常说这看起来像是XY问题。
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];
});
}
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(","));