【发布时间】:2014-12-20 23:29:44
【问题描述】:
我有一个不起作用的功能:
function gapAll( ary2, ary )//perform gap() on all of the values of ary2
{
for( i = 0; i < ary2.length; i++ )
{
gap( ary2[ i ], ary );
}
}
如果我手动执行此操作,它会起作用:
function gapAll( ary2, ary )//perform gap() on all of the values of ary2
{
gap( 0, ary );
gap( 1, ary );
gap( 2, ary );
gap( 3, ary );
gap( 4, ary );
gap( 5, ary );
gap( 6, ary );
gap( 7, ary );
gap( 8, ary );
gap( 9, ary );
}
我的目标是通过循环而不是手动执行此操作。下面是我的所有代码...我无法弄清楚...我只想循环遍历 ary2 的索引并将它们用于间隙。我已将代码缩短为仅此函数使用的项目:
<!DOCTYPE html>
<html>
<head>
<meta charset = "utf-8">
<title>test</title>
<style>
html
{
background-color: #0f0f0f;
color: #ccc;
font-family:Arial;
font-size:90%;
}
</style>
</head>
<body>
<header>
</header>
<section id = "body">
<h3>result</h3>
<p id = "trg">...</p>
</section>
<footer>
</footer>
<script>
/*|||||||||||||||||||||||||||||||||||||| BASE ARRAYS ||||||||||||||||||||||||||||||||||||||*/
digits = [];//digits 1 - 9
for( i = 0; i < 10; i++ )
{
digits.push( i );
window[ 'digit' + i ] = 0;
} digitsCpy = digits.slice( 0 );
/*||||||||||||||||||||||||||||||||||||||| FUNCTIONS |||||||||||||||||||||||||||||||||||||||*/
function gapAll( ary2, ary )//gap
{
for( i = 0; i < ary2.length; i++ )
{
gap( ary2[ i ], ary );
}
}
function gap( v, ary )//gap
{
v = v.toString();
places = [];
if( v.toString().length == 1 )
{
var counter = 0;
var identifier = new RegExp( v );
for( i = 0; i < ary.length; i++ )
{
if( identifier.test( ary[ i ] ) == true )
{ places.push( i ) }
}
var gaps = places.slice( 0 );
for( i = 0; i < places.length; i++ )
{
if( i > 0 )
{
j = i - 1;
gaps[ i ] = places[ i ] - places[ j ] - 1;
}
}
window[ 'digit' + v ] = gaps.slice( 0 );
if( window[ 'digit' + v ] == '' )
{ window[ 'digit' + v ] = 0; }
}
else if( v.toString().length == 2 )
{
x = v.slice( 0, 1 );
y = v.slice( 1, 2 );
var counter = 0;
var identifier = new RegExp( x + ".*" + y + "|" + y + ".*" + x );
for( i = 0; i < ary.length; i++ )
{
if( identifier.test( ary[ i ] ) == true )
{ places.push( i ) }
}
var gaps = places.slice( 0 );
for( i = 0; i < places.length; i++ )
{
if( i > 0 )
{
j = i - 1;
gaps[ i ] = places[ i ] - places[ j ] - 1;
}
}
window[ 'pair' + v ] = gaps.slice( 0 );
if( window[ 'pair' + v ] == '' )
{ window[ 'pair' + v ] = 0; }
}
else if( v.toString().length == 3 )
{
x = v.slice( 0, 1 );
y = v.slice( 1, 2 );
z = v.slice( 2, 3 );
var counter = 0;
var identifier = new RegExp
(
x + ".*" + y + ".*" + z + "|" + x + ".*" + z + ".*" + y + "|" +
y + ".*" + x + ".*" + z + "|" + y + ".*" + z + ".*" + x + "|" +
z + ".*" + x + ".*" + y + "|" + z + ".*" + y + ".*" + x
);
for( i = 0; i < ary.length; i++ )
{
if( identifier.test( ary[ i ] ) == true )
{ places.push( i ) }
}
var gaps = places.slice( 0 );
for( i = 0; i < places.length; i++ )
{
if( i > 0 )
{
j = i - 1;
gaps[ i ] = places[ i ] - places[ j ] - 1;
}
}
window[ 'set' + v ] = gaps.slice( 0 );
if( window[ 'set' + v ] == '' )
{ window[ 'set' + v ] = 0; }
}
}
function addDim( m )//add dimension to m
{
if( Array.isArray( m ) )
{
for( i = 0; i < m.length; i++ )
{
if( m[ i ].length > 1 )
{
m[ i ] = m[ i ].split( '' );
}
}
return m;
}
else
{
ary = m.split( ' ' );
return ary;
}
}
/*||||||||||||||||||||||||||||||||||||||| MAIN ||||||||||||||||||||||||||||||||||||||||*/
ary = [ 409,879,483,465,907,154,838,847,432,434,842,401 ];
gapAll( digits, ary );
document.getElementById( 'trg' ).innerHTML = digit3;
</script>
</body>
</html>
只是为了让这更容易理解gap( v, ary ) 函数的整个想法是找到“间隙”或数组中值之间的空间。所以如果我在数组 [5, 2, 5] 中寻找 5。 gap( 5, ary) 将返回 ( 0, 1 )。因为 5 在第一个索引 (0) 处,然后在第三个索引处重复之前跳过了 1 个索引 (2)。
这可能很简单,因为我是新手。感谢您提供的任何帮助。
【问题讨论】:
-
你可以先声明
i。 -
从@U2744SNOWFLAKE 继续 - 在你的循环声明中,你应该有
var i而不仅仅是i
标签: javascript arrays loops for-loop