angularjs 删除对象中的false值

esyap4oy  于 2022-11-21  发布在  Angular
关注(0)|答案(5)|浏览(136)

我面临的问题是-删除具有false属性的对象中的值

var myObj={105:true,183:false,108:true,106:false}

我可以通过使用以下逻辑获得数组中的值:
Object.keys(myObj)得到["105","183","108","106"]但是我需要一种方法来删除属性为false的值并生成["105",108"]。你能帮我吗?

2ledvvac

2ledvvac1#

数组中有对象的键。对其运行筛选器。

var myObj={105:true,183:false,108:true,106:false};

var result = Object.keys(myObj).filter(function(x) { 
    return myObj[x] !== false; 
});
// result = ["105", "108"]
9bfwbjaz

9bfwbjaz2#

我刚刚为您在JSBin上遇到的问题创建了一个解决方案:Working Demo
请查看以下代码:

var myObj={105:true,183:false,108:true,106:false};
var myArray = [];

function RemoveFalseAndTransformToArray () {
  for (var key in myObj) {
    if(myObj[key] === false) {
        delete myObj[key];
    } else {
        myArray.push(key);
    }
  }
}
RemoveFalseAndTransformToArray();
console.log("myObj: ", myObj);
console.log("myArray: ", myArray);
// result = ["105", "108"]

如果你有任何问题请告诉我。

i5desfxk

i5desfxk3#

要删除这些属性,可以使用以下算法:

for (k in myObj)
{
  if (myObj.hasOwnProperty(k) && myObj[k] === false)
  {
      delete myObj[k];
  }
}

如果你只是对非false值的键感兴趣,你可以用途:

var keys = Object.keys(myObj).filter(function (k) {
  return myObj[k] !== false;
});

hasOwnProperty()检查是必要的,因为对象可能包含非用户属性(例如prototype),您确实不想弄乱这些属性。

bvhaajcl

bvhaajcl4#

您需要使用for...in循环遍历对象

var myObj={105:true,183:false,108:true,106:false}
for(var key in myObj){
  if(myObj.hasOwnProperty(key) && myObj[key] == false){
   delete myObj[key];
  }
}

console.log(JSON.stringify(myObj)) //{"105":true,"108":true}
console.log(Object.keys(myObj)) //["105", "108"]
6ioyuze2

6ioyuze25#

ES6有一个单行的方法来做这个,这改变了原始数组!

Object.keys(myObj).map(key => !myObj[key] && delete myObj[key])

要避免这种情况,请使用扩展运算符

const filteredObj = [...myObj]
   Object.keys(filteredObj).map(key => !filteredObj[key] && delete filteredObj[key])

相关问题