由于某种原因,JS数组拼接不会删除索引

时间:2015-09-03 12:07:25

标签: javascript

这是我发送的代码:

for (var com = 0; com < 10; com++) {
        var op = [0, 1, 2, 3];
        combo = op[Math.floor(Math.random() * op.length)];
        door1[com] = combo;
        op.splice(combo, 1);
        combo = op[Math.floor(Math.random() * op.length)];
        door2[com] = combo;
        op.splice(combo, 1);
        combo = op[Math.floor(Math.random() * op.length)];
        door3[com] = combo;
        op.splice(combo, 1);
        combo = op[Math.floor(Math.random() * op.length)];
        door4[com] = combo;
        eim.print(op.toString());
}

现在我打印op数组。我应该只获得1个值,因为我已经删除了其他索引。与拼接。 但是当我打印结果10次。我发现有些索引没有被删除。 我试图创建4种不同的组合。每个组合都与另一个组合不同。

3 个答案:

答案 0 :(得分:2)

你在做什么,

#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;

void reverse(string str)
{
    char *tail, *head;
    head = &str[0];
    tail = &str[str.size()];

    cout << "String inverted is: ";

    while ((head!=tail)&&(head!=--tail))
    {
        char temp=*head;
        *head++=*tail;
        *tail=temp;
    }
}

int main(int argc, char const *argv[])
{
    string str;
    cout << "Enter a string: ";
    getline(cin,str);
    reverse(str);
    cout << str;
    cout <<"\n";

    return 0;
}

现在它要做的是从索引为Array.splice(combo,1); 的数组中拼接一个元素,现在combo可以是任何值,而且它不是索引。

您可以按索引FIDDLE

进行尝试

代码:

combo

答案 1 :(得分:1)

只需取门阵列的拼接元素即可。 var newSpreadsheet = SpreadsheetApp.create("I am a copy"); var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1"); var projectname = SpreadsheetApp.getActiveSpreadsheet(); sheet.copyTo(newSpreadsheet); var dest = newSpreadsheet.getSheetByName("Copy of Sheet1").getRange("E7"); newSpreadsheet.getSheetByName("Copy of Sheet1").getRange("B1").copyTo(dest); var notNeeded = newSpreadsheet.getSheetByName("Copy of Sheet1"); newSpreadsheet.deleteSheet(notNeeded); 返回一个数组,所以对于一个数组,取第一个元素,索引为Array.prototype.splice

[0]的最后一个分配不需要随机计算,只需要采用数组door4的单个元素。

&#13;
&#13;
op
&#13;
&#13;
&#13;

答案 2 :(得分:0)

您需要使用项目的索引将其从数组中删除,而不是值

var door1 = {},
  door2 = {},
  door3 = {},
  door4 = {};
for (var com = 0; com < 10; com++) {
  var op = [0, 1, 2, 3];
  door1[com] = getValue(op);
  door2[com] = getValue(op);
  door3[com] = getValue(op);
  door4[com] = getValue(op);
  snippet.log(JSON.stringify(op));
  console.log(op)
}

function getValue(array) {
  var idx = Math.floor(Math.random() * array.length),
    val = array[idx];
  array.splice(idx, 1);
  return val;
}
<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>