繁体   English   中英

按值从数组拼接行

[英]splice row from array by value

我想拼接值= 3的线

[3,"John", 90909090]

data.json

{
"headers":[[
{"text":"Code","class":"Code"},
{"text":"Code","class":"Code"}
]],
"rows":[
[0,"Peter", 51123123],
[3,"John", 90909090],
[5,"Mary",51123123]
],
"config":[[0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]],
"other":[[13,0]]
}

我试试这个

var size = data.rows.length; // number of rows

var del = 3 // Value of ID to be deleted          

for (i = 0; i < size; i++) {  

var id = data.rows[i][0];                  

    if(del==id){  // if del = id -> splice                                         

       data.rows.splice(i,1);

    }

}

结果

只有拼接或只循环此代码才有效。

但是,两者都显示了这个错误:

未捕获的TypeError:无法读取未定义的属性“0”(...)

它出现在“data.rows [i] [0]”中

而不是使用for循环,id使用数组过滤器函数:

data.rows = data.rows.filter(function(row){
    return row[0] !== del;
});

只需在条件中添加一个break ,因为下一个元素是你拼接的元素,它不再是数组中的元素。

if (del == id) {  // if del = id -> splice
   data.rows.splice(i, 1);
   break; // no more to search
}

您可以使用Array#forEach()进行迭代:

 var data = {"headers": [[{"text": "Code","class": "Code"}, {"text": "Code","class": "Code"}]],"rows": [[0, "Peter", 51123123],[3, "John", 90909090],[5, "Mary", 51123123]],"config": [[0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]],"other": [[13, 0]]}, del = 3; // Value of ID to be deleted data.rows.forEach(function(item, index) { item[0] === del && data.rows.splice(index, 1); }); console.log(data.rows); 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 

ES6

data.rows.forEach((item, index) => item[0] === del && data.rows.splice(index, 1));

您可以使用lodash过滤对象或数组。 查看您的案例的过滤方法

var myObject = {
"headers":[[
{"text":"Code","class":"Code"},
{"text":"Code","class":"Code"}
]],
"rows":[
[0,"Peter", 51123123],
[3,"John", 90909090],
[5,"Mary",51123123]
],
"config":[[0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]],
"other":[[13,0]]
};

//filter by lodash
myObject.rows =  _.filter(myObject.rows,function(row){
  return row[0] !== 3;
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM