Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用es6筛选对象值_Javascript_Reactjs_Ecmascript 6 - Fatal编程技术网

Javascript 如何使用es6筛选对象值

Javascript 如何使用es6筛选对象值,javascript,reactjs,ecmascript-6,Javascript,Reactjs,Ecmascript 6,我有一个2对象,我不想用es6进行过滤 第一个是我的数据对象,第二个选择了一些数据 我不想获取数据对象中具有第二个对象值的所有项 let data = [ { id: 1, name: 'A', status: 1 }, { id: 2, name: 'B', status: 1 }, { id: 3, name: 'C', status: 3 }, { id: 4, name:

我有一个2对象,我不想用es6进行过滤

第一个是我的数据对象,第二个选择了一些数据

我不想获取数据对象中具有第二个对象值的所有项

let data = [
  {
    id: 1,
    name: 'A',
    status: 1
  },
  {
    id: 2,
    name: 'B',
    status: 1
  },
  {
    id: 3,
    name: 'C',
    status: 3
  },
  {
    id: 4,
    name: 'D',
    status: 2
  }
]
第二个目标是:

let selectedStatus = [
  {
    id: 1,
    status: 1
  },
  {
    status: 3
  }
]
在这种情况下,我不想获取第二个对象中包含相同状态的数据对象项,因此在这种情况下,我需要获得以下结果:

data = [
  {
    id: 1,
    name: 'A',
    status: 1
  },
  {
    id: 2,
    name: 'B',
    status: 1
  },
  {
    id: 3,
    name: 'C',
    status: 3
  },
]

下面的代码片段将给出预期的答案:

var result = [];
data.forEach((value) => {
    selectedStatus.forEach(val => {
        if(value.status == val.status) { 
            result.push(value) 
        } 
    }); 
});
console.log(result)
您可以这样做:

data = data.filter(item =>
  selectedStatus.map(s => s.status).includes(item.status)
);

假设您没有任何浏览器限制,您可以使用,然后使用检查
数据
上位于
selectedStatus
上的状态,然后使用筛选出符合所需条件的对象

const数据=[
{
id:1,
名称:‘A’,
现状:1
},
{
id:2,
名称:‘B’,
现状:1
},
{
id:3,
名称:‘C’,
现状:3
},
{
id:4,
名称:“D”,
现状:2
}
]
const selectedStatus=[
{
id:1,
现状:1
},
{
现状:3
}
];
const res=data.filter(obj=>selectedStatus.map(s=>s.status).includes(obj.status));

控制台日志(res)如果您想要生成第三个列表,就像您预期的结果一样,您可以生成一个与之匹配的白名单

const whiteList = selectedStatus.map((sel) => sel.status); // which gives you an array of all selected status you want to filter for

const filteredData = data.filter((data) => ~whiteList.indexOf(data.status)); // please consider that filter returns a new array that contain all items where the condition was falsy. That can be confusing.
要了解
~
操作员,请检查

您可能会对过滤数组的结果感到困惑。请考虑<代码>数组.Frase返回一个新数组,该数组包含所有不符合条件的项,换句话说,它是一个否定项。这可能令人困惑。

ES7


什么不起作用?到目前为止您是如何尝试的,您尝试了什么?请提供您希望对
selectedStatus[0]执行的操作。id
?您可以使用includes或某些,而不是使用~with indexOf。是的,这是一个更简单的解决方案,但需要ES7,他要求一个ES6解决方案……有些是,但问题也标记为React,没有babel也不行(因为jsx)。也许OP添加了es6,认为它是最近的,因为它在不久前还是一个流行词。
const whiteList = selectedStatus.map((sel) => sel.status); // which gives you an array of all selected status you want to filter for

const filteredData = data.filter((data) => ~whiteList.indexOf(data.status)); // please consider that filter returns a new array that contain all items where the condition was falsy. That can be confusing.
const filteredData = data.filter((data) => whiteList.includes(data.status));