在JavaScript中从索引向后遍历数组
我有一些Python代码可以很好地实现我想要的功能,但要将其移植到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:])
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谢谢,问题中不清楚这是否是后置条件。我想当然地认为它不是。无论如何,这是一个很好的观点。我在答案中引用了您并更新了它。再次感谢您。