$ .inArray没有处理对象JavaScript对象的任何替代方案?

时间:2014-11-13 16:38:06

标签: javascript jquery arrays object

我正在处理对象,我想从中移除特定地址的值。 我需要元素的位置,并希望从对象中删除它

这是代码:

var matches =  {
     "users-email": "email", 
     "users-activated": "activated", 
     "users-created_at": "created_at", 
     "users-registration_page": "registration_page", 
     "profiles-firstname": "firstname"
} ;
var option = 'firstname';

var if_in = $.inArray(option, matches );
//console.log(matches)
if( if_in !== -1 )
{
    matches.splice(if_in, 1);
}

$.each(matches , function(i,v){
   $('.test').append(v+'<br>');
});

在我的对象$.inArray()中没有工作它返回-1。

有人可以帮我找到这个问题。

jsfiddle link

3 个答案:

答案 0 :(得分:4)

更正了按值删除的答案。您可以使用$ .each迭代对象并删除匹配值。

$.each (matches, function(key, value) {
   if (value == option) {
      delete matches[key];
      return false; //deleted matching value
   }
});

按值删除多个键

var keysToDelete = [];
for (var key in matches) {
   if (matches[key] == option) {
      keysToDelete.push(key);
   }
};

for (var i = 0; i < keysToDelete.length; i++ ) {
   if (matches.hasOwnProperty(keysToDelete[i])) {
      delete matches[keysToDelete[i]];
   }
}

答案 1 :(得分:4)

如果要检查您的选项是否与值匹配,最简单的方法是遍历每个属性并以这种方式检查值

var matches =  {"users-email": "email", "users-activated": "activated", "users-created_at": "created_at", "users-registration_page": "registration_page", "profiles-firstname": "firstname"} ;
var option = 'firstname';

for (var key in matches) {
    if (matches[key] === option) {
        alert ("IN");
        break;
    }
}

答案 2 :(得分:3)

好像你正在检查价值而不是钥匙;也许是这样的?

var key = undefined;
for(var i in matches) {
  if (matches[i] === option)  {key = i; break; }
}
if (key !== undefined) delete matches[key];