3

arrayの数字があります[1,2,3,4,5,6,7,8,9,10]

このシーケンスから、現在の 2 つ以上のアイテムとは異なるすべての番号を取得する必要がありますが、ループしています。

たとえば、現在の番号が 1 の場合、新しいリストには 以外9,10,1,2,3のすべてが含まれている必要があります。または、現在の番号が 4 の場合、新しいリストには 以外のすべてが含まれている必要があります2,3,4,5,6

最初と最後にアイテムの複数のループを作成せずに、これを行う方法はありますか?

ありがとうございました。

4

3 に答える 3

2
var a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];          

var exclude = function (start, distance, array) { 
    var result = [];                              

    for (var i = 0; i < array.length; i++) {      

        var d = Math.min(                         
            Math.abs(start - i - 1),              
            Math.abs(array.length + start - i - 1)
        )                                         

        if (d > distance) {                      
            result.push(array[i]);                
        }                                         
    }                                             

    return result;                                
}                                                 
于 2012-07-12T10:17:59.867 に答える
1

私はこれがあなたが尋ねたことを実行すると思います:

// Sorry about the name
function strangePick(value, array) {
  var n = array.length
    , i = array.indexOf(value);

  if (i >= 0) {
    // Picked number
    var result = [value];

    // Previous 2 numbers
    result.unshift(array[(i + n - 1) % n]);
    result.unshift(array[(i + n - 2) % n]);

    // Next 2 numbers
    result.push(array[(i + 1) % n]);
    result.push(array[(i + 2) % n]);

    return result;
  } else {
    return [];
  }
}

いくつかのテスト:

var array = [1,2,3,4,5,6,7,8,9,10];

console.log(strangePick(1, array)); // [9,10,1,2,3]
console.log(strangePick(4, array)); // [2,3,4,5,6]
于 2012-07-12T09:34:58.623 に答える
1

javascript array.slice を使用できます。

function get_offset_sequence(arr, index, offset) {
        var result = [];
        if (index - offset < 0) {
            result = arr.slice(index - offset).concat(arr.slice(0, index + offset + 1));
        }
        else if (index + offset > arr.length - 1) {
            result = arr.slice(index - offset).concat(arr.slice(0, Math.abs(arr.length - 1 - index - offset)));
        }
        else {
            result = arr.slice(index - offset, index + offset + 1)
        }
        return result;
    }

使用例:

var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
var index = 1;
var offset = 2;

for (var i=0; i < 10; i++) { console.log(i, arr[i], get_offset_sequence(arr, i, offset)) }
于 2012-07-12T09:51:28.800 に答える