2

代码在 ExtJS 中。我从网格面板获取的数据。当用户单击一行时,我正在检索数据以自动填充弹出窗口。

for(index = 0; index < grid_obj.getStore().getCount(); index++){
if(sm.isSelected(index)){ 
selected_row = index;
record = grid_obj.getStore().getAt(index);
record_data = record.data.field;
s_record = record_data.toString().replace('(','').replace(')','').split(',');
}
}

我有一个 ExtJS 代码,后端代码是用 Python 编写的。我有以下情况:

data = (1,2,4);

这是我无法修改的python代码返回的格式。我需要将其转换为数组,以便我可以使用indexOf. 我尝试了各种方法,例如:

record = Array(data.toString().replace('(','').replace(')','').split(','));

如果我这样做alert(record.indexOf('2')),它会给我-1。

4

3 回答 3

1

数据如何发送到客户端?Javascript 将始终将其作为字符串获取,并且 aa 元组的字符串表示形式如下所示: 看起来像这样:"(1,2,3,4)"。要将这些数字放入数组中,您可以这样做:

tuple = "(1,2,3,4,5)"; // just getting some test data, you'll probably get this in an AJAX response from the server
data = tuple.substring(1,tuple.length - 1).split(",");

现在你有一个字符串数组,每个字符串都包含元组中的数据。

如果您现在想将其转换为整数数组,您可以执行以下操作:

for(index in dat)
{
    data[index] = Number(data[index])

}
于 2012-06-02T09:01:55.707 回答
0

你需要这个:

record = data.toString().replace('(','').replace(')','').split(',');

删除额外的Array(..),因为split(..)返回一个数组本身。

于 2012-06-02T08:55:20.257 回答
0

你可以自己解析它,假设我们有 Python 返回的元组,如下所示:

((2, 'C/C++', 0, 'clang_cpp'), (3, 'Python相关', 0, 'python'))

首先,我们继续读取元组字符串中的字符,但存储最后一个左分号的位置以及我们遇到了多少分号(我们可以称之为左分号级别,对于右分号也是如此),每当我们遇到右分号时,我们都会这样做下面的事情:

  1. 取一个从最后一个分号到当前右分号的子字符串。(在这个子字符串中,没有更多的分号,我们只是用“,”将它分成数组。假设新数组是M
  2. 然后我们追加M到我们的结果数组,该数组将存储所有M.
  3. 第三,删除我们从原始字符串中取出的子字符串。
  4. 最后,像第 1 步一样执行相同的操作,直到左右分号的级别为 0。

JavaScript 代码如下:

function parseTuple(t){
    var lc = "(";
    var rc = ")";
    var lc_level = 0;
    var rc_level = 0;
    var last_lc = 0;
    var last_rc = 0;
    var result = [];
    for(i=0;i<t.length;i++){
        if(t[i] == lc){
            lc_level++;
            last_lc = i;
        }else if(t[i] == rc){
            rc_level++;
            last_rc = i;
        }
        if(rc_level == 1){
            var substr = t.slice(last_lc+1,last_rc);
            var data = substr.split(",");
            result.push(data);
            lc_level--;
            rc_level--;
            i = 0;
            t = t.slice(0,last_lc) + t.substring(last_rc+1);
        }
        if(lc_level == rc_level && lc_level==0){
            break;
        }
    }
    return result;
}

于 2017-08-22T03:47:55.463 回答