JS Array.indexOf返回错误的值

时间:2018-09-11 07:18:10

标签: javascript java arrays

现在我的问题有点奇怪了。我的JS文件中有一个循环,该循环遍历表元素,并应该使用数组中的值更新输入字段。

var array = list.replace("[","").replace("]","").split(",");
//9c9bd0f3-9499-4cdc-beaf-3c4d62d3b5a7, 80.0, 15334f50-43eb-46b0-8f7d-1d9011f8b3b5, 20.0
if (array.length > 1) {
    var table = document.getElementById('table');
    for (var r = 1, n = table.rows.length; r < n; r++) {
    //skip first row as that's the head
    //table has 3 rows including head
        var a = table.rows[r];
        var markerId = a.getElementsByTagName("label")[1].id;
        //loop 1: 15334f50-43eb-46b0-8f7d-1d9011f8b3b5
        //loop 2: 9c9bd0f3-9499-4cdc-beaf-3c4d62d3b5a7
        var id = array.indexOf(markerId);
        //loop 1: -1
        //loop 2: 0
        a.getElementsByTagName("input")[0].value = Number(array[(id+1)]);  
    }
}

我的问题是,即使“ markerId”值在数组中,第一个循环也返回-1。

编辑1:列表变量来自显示页面之前的context.put方法,列表= [9c9bd0f3-9499-4cdc-beaf-3c4d62d3b5a7,80.0,15334f50-43eb-46b0-8f7d-1d9011f8b3b5,20.0] < / p>

编辑2:这是创建和设置列表值的后端代码。

public void doEdit_assignment(RunData data) {
    SessionState state = ((JetspeedRunData) data).getPortletSessionState(((JetspeedRunData) data).getJs_peid());
    ParameterParser params = data.getParameters();
    String assignmentId = StringUtils.trimToNull(params.getString("assignmentId"));
    Assignment a = getAssignment(assignmentId, "doEdit_assignment", state);
    Set<AssignmentMarker> markers = assignmentService.getMarkers(a);
    List<String> quotas = new ArrayList<String>();
    for (AssignmentMarker marker : markers) {
        quotas.add(marker.getMarkerUserId());
        quotas.add(marker.getQuotaPercentage().toString());
        //add reassign marker select option here
    }
    state.setAttribute(ASSIGNMENT_QUOTA_VALUES, quotas);
    setAssignmentSupplementItemInState(state, a);
}

我不能给你更多。事实是,值位于数组中,该数组在第二次迭代中起作用,但由于某种原因而不是第一次迭代。

1 个答案:

答案 0 :(得分:1)

由于尚未提供标记,因此代码中的Dim db As DAO.Database Dim tdf As DAO.TableDef Dim strConn As String Dim ODBCTableName as String Dim AccessTableName as String Set db = CurrentDb() ODBCTableName = "dbo.YourTable" AccessTableName = "YourTable" strConn = "ODBC;Driver={SQL Server};Server=YOURSERVER\SQLINSTANCE;Database=MYDATABASE;Trusted_Connection=No;UID=MyUserName;PWD=MyPassword" db.TableDefs.Refresh For Each tdf In db.TableDefs If tdf.Name = AccessTableName Then db.TableDefs.Delete tdf.Name Exit For End If Next tdf Set tdf = db.CreateTableDef(AccessTableName) '=============================== 'If your connection string includes a password 'and you want the password to be saved, include the following 3 lines of code 'to specify the dbAttachSavePWD attribute of the TableDef being created 'If you don't want to save the password, you would omit these 3 lines of code '=============================== If InStr(strConn, "PWD=") Then tdf.Attributes = dbAttachSavePWD End If tdf.SourceTableName = ODBCTableName tdf.Connect = strConn db.TableDefs.Append tdf 未定义。而且我将假设table是一个字符串,即使没有引号也是如此。

所以

list

所以,这意味着数组显示为..

var list = '[9c9bd0f3-9499-4cdc-beaf-3c4d62d3b5a7, 80.0, 15334f50-43eb-46b0-8f7d-1d9011f8b3b5, 20.0]'
var array = list.replace("[","").replace("]","").split(",");

您的问题可能是双引号后的多余空格,因此您的后端代码都应输出[ "9c9bd0f3-9499-4cdc-beaf-3c4d62d3b5a7", " 80.0", " 15334f50-43eb-46b0-8f7d-1d9011f8b3b5", " 20.0" ] ,而无需多余空格,例如..

list

或者,您应该将Javascript代码更改为此。.

var list = '[9c9bd0f3-9499-4cdc-beaf-3c4d62d3b5a7,80.0,15334f50-43eb-46b0-8f7d-1d9011f8b3b5,20.0]'
// Notice, no spaces between commas.

Map的工作原理是循环遍历数组的每个元素,而trim删除开头/结尾的空白。