在JavaScript中从索引向后遍历数组

在JavaScript中从索引向后遍历数组,javascript,python,arrays,Javascript,Python,Arrays,我有一些Python代码可以很好地实现我想要的功能,但要将其移植到JavaScript中却很难做到干净 jsonLine = [[0,1],[2,4],[4,8],[9,12],[11,16],[12,13]] [firstX, firstY] = [9,12] if [firstX, firstY] in jsonLine: index = jsonLine.index([firstX, firstY]) lineArray.append(jsonLine[index:])

我有一些Python代码可以很好地实现我想要的功能,但要将其移植到JavaScript中却很难做到干净

jsonLine = [[0,1],[2,4],[4,8],[9,12],[11,16],[12,13]]
[firstX, firstY] = [9,12]

if [firstX, firstY] in jsonLine:
    index = jsonLine.index([firstX, firstY])

    lineArray.append(jsonLine[index:])
    lineArray.append(jsonLine[index::-1])
jsonLine是一个坐标数组,组成一条直线,[firstX,firstY]是一条直线上的起点,由用户定义。我正在创建一个脚本,创建两条线,一条在用户选择的点的任意方向上,稍后将根据与用户点的距离缩短

在这种情况下,所需输出为:

[[[9,12],[11,16],[12,13]],[[9,12],[4,8],[2,4],[0,1]]]
下面是我的JavaScript,它获得了第一个所需的数组,但是使用for循环感觉不太正确,如果我使用
jsonLine.reverse().slice(featureArray.length vertex)
,它似乎复制了推送到lineArray的数组。有没有更干净的方法来分割数组并反转它

for (var vertex = 0; vertex < featureArray.length; vertex++){
     if (jsonLine[vertex][0] === firstX && jsonLine[vertex][1] === firstY) {
        console.log(jsonLine.slice(vertex))
    }
for(var-vertex=0;vertex
您可以创建一个查找方法来查找您感兴趣的坐标的索引。然后,应用slice和reverse来获取您要查找的格式:

var jsonLine = [
    [0, 1],
    [2, 4],
    [4, 8],
    [9, 12],
    [11, 16],
    [12, 13]
],
    el = [9, 12],
    index, res;

function findElement() {
    var i = 0;
    for (; i < jsonLine.length; i += 1) {
        if (jsonLine[i][0] === el[0] && jsonLine[i][1] === el[1]) {
            return i;
        }
    }
    return -1;
}
index = findElement();
res = [
    [jsonLine.slice(index)],
    [jsonLine.reverse().slice(index - 1)]// -1 because you want to repeat the element.
];
console.log(res);
var jsonLine=[
[0, 1],
[2, 4],
[4, 8],
[9, 12],
[11, 16],
[12, 13]
],
el=[9,12],
指数,res;
函数findElement(){
var i=0;
对于(;i


注意:正如@RobG在这个答案的评论中指出的那样,如果您想保持数组的完整性,请用
jsonLine.slice(0,index+1)替换第二部分。reverse()
。reverse修改原始数组,这可能是不希望的行为(尽管在问题中不清楚是否是这样).

对于(var vertex=featureArray.length-cut;vertex--;){…
您可以使用slice创建第一个数组,然后使用slice+reverse创建第二个数组,类似于:
[jsonLine.slice(vertex),jsonLine.slice(vertex).reverse()
@RobG不幸的是,通过首先切片,我只得到了我需要的两个数组中的第一个,但是向后,而不是第二个。我认为
lineArray=([[featureArray.slice(vertex)],[featureArray.reverse().slice(featureArray.length-vertex)],
虽然有效,谢谢。啊,现在我看到你想要的了:
[[featureArray.slice(vertex)],[featureArray.slice(0,顶点+1).reverse()]
。第二部分应该是
jsonLine.slice(0,索引+1).reverse()
否则reverse将修改原始数组。@RobG谢谢,问题中不清楚这是否是后置条件。我想当然地认为它不是。无论如何,这是一个很好的观点。我在答案中引用了您并更新了它。再次感谢您。