Javascript 如何获取特定行的索引来删除它
我有这个阵列:Javascript 如何获取特定行的索引来删除它,javascript,jquery,Javascript,Jquery,我有这个阵列: {"actividades":[ {"id_miembro":"V-005","id_dpto":"D-01","id_actividad":"AC-04","id_seccion":"S-03"}, {"id_miembro":"V-006","id_dpto":"D-01","id_actividad":"AC-01","id_seccion":"S-02"}, {"id_miembro":"V-007","id_dpto":"D-01","id_ac
{"actividades":[
{"id_miembro":"V-005","id_dpto":"D-01","id_actividad":"AC-04","id_seccion":"S-03"},
{"id_miembro":"V-006","id_dpto":"D-01","id_actividad":"AC-01","id_seccion":"S-02"},
{"id_miembro":"V-007","id_dpto":"D-01","id_actividad":"AC-02","id_seccion":"S-01"},
{"id_miembro":"V-008","id_dpto":"D-01","id_actividad":"AC-03","id_seccion":"S-01"}
]}
当
“id\u miembro”=“V-007”
要从数组中删除此数据时,如何获取数组的索引?您可以使用$.grep()
注意:我假设您在一个名为xObj的变量中有JSON
API:只需使用JavaScript:
假设:
myObj = {"actividades":[
{"id_miembro":"V-005","id_dpto":"D-01","id_actividad":"AC-04","id_seccion":"S-03"},
{"id_miembro":"V-006","id_dpto":"D-01","id_actividad":"AC-01","id_seccion":"S-02"},
{"id_miembro":"V-007","id_dpto":"D-01","id_actividad":"AC-02","id_seccion":"S-01"},
{"id_miembro":"V-008","id_dpto":"D-01","id_actividad":"AC-03","id_seccion":"S-01"}
]}
然后:
(.filter
返回过滤后的数组。我将其分配给旧对象作为替换,但您当然可以在任何想要的变量中使用它)
但是,.filter()
的IE支持是IE9+。如果要支持较旧的浏览器,您可能需要使用MDN链接中提供的plyfill。使用以下库很容易:
请参见。其他答案对于通过在数组中删除元素非常有用,但如果您需要索引,这里为您提供了一个小功能:
function getIndex(arr, key, val, single){
var rArr = $.map(arr, function(obj, i){
if(obj[key] === val) return i;
});
return single ?
(rArr.length ? rArr[0] : -1):
rArr;
}
你可以这样称呼它:
var myIndex=getIndex(obj.actividades,'id_miembro','V-007',true)
其中参数如下所示:
您正在搜索的对象李>
你看到的钥匙李>
匹配的值李>
返回单个索引[整数]或所有匹配项[数组]
这里有一个活生生的例子:@Tilwin感谢API链接。。!我想你把i,val
搞混了-索引是grep
-“Type:Function(objectelementofarray,Integer indexInArray)”中的第二个参数是的,没错。。据此编辑。我想知道有没有什么简单的方法可以记住这一点,因为我在使用.each()
和其他工具时总是感到困惑:)我一直在混淆它们…有一天它会点击…也许:\I realice the test with.grep,它会删除搜索行,但是json数组返回以下内容:{[{“id_miembro”:“V-005”,“id_dpto”:“D-01”,“id_actividad”:“AC-04”,“id_seccion”:“S-03”},{“id_miembro”:“V-006”,“id_dpto”:“D-01”,“id_actividad”:“AC-01”,“id_seccion”:“S-02”}{“id_miembro”:“V-008”,“id_dpto”:“D-01”,“id_actividad”:“AC-03”,“id_seccion”:“S-01”}]}似乎索引“actividades”“是否已删除?对于本机JS支持的函数,实际上不需要导入库。此外,这并不是OP真正想要的结果。@Cerbrus代码使用Lo Dash更清晰。此外,它还提供了很多OP可以在代码的其他部分使用的功能。
myObj.actividades = myObj.actividades.filter(function(e){
return e.id_miembro !== "V-007";
});
var index = _.findIndex(array.actividades, { 'id_miembro': 'V-007' });
function getIndex(arr, key, val, single){
var rArr = $.map(arr, function(obj, i){
if(obj[key] === val) return i;
});
return single ?
(rArr.length ? rArr[0] : -1):
rArr;
}