Javascript 有没有一种干燥的方法可以做到这一点?
我有以下[被严重剪断的]代码:Javascript 有没有一种干燥的方法可以做到这一点?,javascript,Javascript,我有以下[被严重剪断的]代码: data = {}; data['someradio'] = '2'; for(key in data) { if(data.hasOwnProperty(key)) { if(key == 'someradio') { document.getElementById(key + '1').checked = data[key] == '1' ? true : false;
data = {};
data['someradio'] = '2';
for(key in data)
{
if(data.hasOwnProperty(key))
{
if(key == 'someradio')
{
document.getElementById(key + '1').checked = data[key] == '1' ? true : false;
document.getElementById(key + '2').checked = data[key] == '2' ? true : false;
document.getElementById(key + '3').checked = data[key] == '3' ? true : false;
}
}
}
是否有办法将3文档。
行压缩为1
这一行实际上有12次(不是3次)重复出现,只改变了数字。data={};
var counter = 13;
while ( --counter ) {
document.getElementById(key + counter).checked = data[key] == counter;
}
数据['someradio']='2';
用于(输入数据)
{
if(data.hasOwnProperty(key))
{
如果(键=='someradio')
{
对于(var i=1;idata={};
数据['someradio']='2';
用于(输入数据)
{
if(data.hasOwnProperty(key))
{
如果(键=='someradio')
{
对于(var i=1;i,这里有一种更便宜的方法:
data = {};
data['someradio'] = '2';
var key = 'someradio';
var p;
if (p = data[key]) {
for(var i = 1; i < 4; i++) {
document.getElementById(key + i).checked = (i == p);
}
}
data={};
数据['someradio']='2';
var key='someradio';
var-p;
如果(p=数据[键]){
对于(变量i=1;i<4;i++){
document.getElementById(key+i).checked=(i==p);
}
}
这里有一种更便宜的方法:
data = {};
data['someradio'] = '2';
var key = 'someradio';
var p;
if (p = data[key]) {
for(var i = 1; i < 4; i++) {
document.getElementById(key + i).checked = (i == p);
}
}
data={};
数据['someradio']='2';
var key='someradio';
var-p;
如果(p=数据[键]){
对于(变量i=1;i<4;i++){
document.getElementById(key+i).checked=(i==p);
}
}
当然。使用循环,并连接循环计数器,如key+i
。此外,您可以通过在第一个if
条件中使用&&key='someradio'
来去除内部if
,并且您可以缩短。checked
赋值到。checked=data[key]==i
if>(key=='someradio')
所以你在一个对象上迭代以找到一个特定的键?为什么不使用数据。someradio
来代替呢?当x是布尔值时,用x替换true:false
。如果你只想布尔化一个表达式,请不要使用两次。(3-3)
是假
@amnotiam啊,当然!头脑一片空白…这就是我早上5点工作的结果!RE:使用&&key='someradio'
,这实际上是一个更大的开关的一部分
。缩短作业的要点很好。选中了
作业;我以前从未尝试过这样做。@zerkms它实际上是mu的一部分。@zerkmsch较大的开关
,对于大多数键
s具有默认
处理,但对于某些边缘情况,则具有大小写
s;)当然。使用循环并连接循环计数器,如key+i
。此外,在第一个if
条件中使用&&key=='someradio'
可以去掉内部if
,并且可以缩短.checked
赋值到。checked=data[key]==i
if(key=='someradio'))
那么你是在一个对象上迭代来找到一个特定的键?为什么不使用数据呢。someradio
代替呢?当x是布尔值时,用x替换true:false
。如果你只是想布尔化一个表达式,请不要使用两次。(3-3)
是假
@amnotiam啊,当然!头脑一片空白…这就是我早上5点工作的结果!RE:使用&&key='someradio'
,这实际上是一个更大的开关的一部分
。缩短作业的要点很好。选中了
作业;我以前从未尝试过这样做。@zerkms它实际上是mu的一部分。@zerkmsch更大的开关
,对于大多数键
s具有默认
处理,但对于某些边缘情况具有大小写
s;)@Derek朕會功夫 - 第一次运行时,块内的计数器应该是11…如果要声明一个计数器变量并将其用作循环条件,最好使用for循环。@Derek朕會功夫 - 这有什么不同吗?@Dan,Blender-这只是个意见问题。我讨厌循环。它们看起来很丑。@JosephSilber-对不起,不管我说什么……现在有点困了。@Derek朕會功夫 - 第一次运行时,块内的计数器应该是11…如果要声明一个计数器变量并将其用作循环条件,最好使用for循环。@Derek朕會功夫 - 那会有什么不同呢?@Dan,Blender-这只是一个意见问题。我讨厌的循环。它们看起来很难看。@JosephSilber-对不起,不管我说什么……现在有点困了。jQuery肯定没有内置hasOwnProperty
。只使用迭代器加载jQuery会……很奇怪。@JosephSilber你是对的,我应该澄清一下我的意思-他似乎在使用它来确保属性是一个指定的属性,而不是一个内置属性。jQuery通过对象循环的方式免费为你提供了该功能。但这是毫无意义的,因为不必按照他的要求去做。jQuery绝对没有hasOwnProperty
内置。加载jQuery只是为了使用迭代器会…很奇怪。@JosephSilber你是对的,我应该澄清一下我的意思-他似乎用它来确保属性是一个指定的属性,而不是一个内置属性。jQuery在对象中循环的方式让你免费获得该功能。但这没有任何意义,因为不需要做什么他在问。