Javascript 如何筛选具有特定键的数组

Javascript 如何筛选具有特定键的数组,javascript,reactjs,react-native,Javascript,Reactjs,React Native,我有一个如下所示的数组: const data = [ {"id":"1", "sender":"user1", "receiver":"user2", "msg":"hello!"}, {"id":"2", "sender":"user2", "r

我有一个如下所示的数组:

const data = [
{"id":"1", "sender":"user1", "receiver":"user2", "msg":"hello!"},
{"id":"2", "sender":"user2", "receiver":"user1", "msg":"yo!"},
{"id":"3", "sender":"user3", "receiver":"user1", "msg":"hi!!"},
{"id":"4", "sender":"user1", "receiver":"user3", "msg":"hmm"},
...
]
我想做的就是这样。假设,我只想看到user1和user2之间的对话

因此,我想过滤数组并创建一个新数组,该数组只包含发送方为user1且接收方为user2或发送方为user2且接收方为user1的数据

我想,这可以用地图或类似的东西来完成,但我实际上不知道。我是个新来的本地人

You need just use filter for array

const data = [
{"id":"1", "sender":"user1", "receiver":"user2", "msg":"hello!"},
{"id":"2", "sender":"user2", "receiver":"user1", "msg":"yo!"},
{"id":"3", "sender":"user3", "receiver":"user1", "msg":"hi!!"},
{"id":"4", "sender":"user1", "receiver":"user3", "msg":"hmm"},
]

const result = data.filter(rec => {
  if (rec.sender === 'user1' && rec.receiver === 'user2') {
    return rec
  }
  if (rec.sender === 'user2' && rec.receiver === 'user1') {
    return rec
  }
})
这是您的
控制台日志(结果)
输出:

[ { id: '1', sender: 'user1', receiver: 'user2', msg: 'hello!' },
  { id: '2', sender: 'user2', receiver: 'user1', msg: 'yo!' } ]

您可以维护
用户的
数组
,并在此基础上筛选数组:

var数据=[
{“id”:“1”,“发送方”:“user1”,“接收方”:“user2”,“msg”:“hello!”},
{“id”:“2”,“发送方”:“user2”,“接收方”:“user1”,“msg”:“yo!”},
{“id”:“3”,“发送方”:“user3”,“接收方”:“user1”,“msg”:“hi!!”},
{“id”:“4”,“发送方”:“user1”,“接收方”:“user3”,“msg”:“hmm”},
];
var users=['user1','user2'];
var result=data.filter(chat=>users.includes(chat.sender)和&users.includes(chat.receiver));

控制台日志(结果)您需要像下面这样使用

 const data = [
{"id":"1", "sender":"user1", "receiver":"user2", "msg":"hello!"},
{"id":"2", "sender":"user2", "receiver":"user1", "msg":"yo!"},
{"id":"3", "sender":"user3", "receiver":"user1", "msg":"hi!!"},
{"id":"4", "sender":"user1", "receiver":"user3", "msg":"hmm"},
...
]

let filtereddata = data.filter((el)=>{
    return el.sender === "user1" && el.receiver === "user2"
    
})

在这里,Filteredata将只有您想要显示的结果

使用
数组。filter
。回调函数返回一个布尔值:

const data = [
{"id":"1", "sender":"user1", "receiver":"user2", "msg":"hello!"},
{"id":"2", "sender":"user2", "receiver":"user1", "msg":"yo!"},
{"id":"3", "sender":"user3", "receiver":"user1", "msg":"hi!!"},
{"id":"4", "sender":"user1", "receiver":"user3", "msg":"hmm"},
];

function filterData(data) {
    return data.filter((x) => (x.sender === 'user1' && x.receiver === 'user2') || (x.sender === 'user2' && x.receiver ===  'user2'));
}

const result = filterData(data);

谢谢你最快的回复!我现在就要测试它!:)这表明对象作为react childs无效:(这表明了这个最严重的错误D:谢谢你给出了第二个最快的答案!!我现在就要测试它!到时候我会投赞成票:)嗯!!这个社区太棒了!!我要测试这三个,让你们知道我的投票:)谢谢!!要测试它并让大家知道:)这显示了一个可怕的错误:plz帮助:(您发送的代码是基于类的组件,您不能像那样声明常量变量,也不能将其移动到componentDidMount()中)或者任何其他需要在react类组件中声明的函数,它将起作用。如果我做了一些更新,请现在检查。它仍然显示相同的情况。当您在render函数中显示数据时,您需要做一些小的更改。您正在打印整个对象,我的意思是这样{this.state.data}但是您需要从数组中提取一些特定的值,并像{this.state.data[0].id}那样打印感谢:)来测试并通知您所有人:D这显示了这个最严重的错误:(问题作者没有义务“接受”答案。但是,我们更喜欢作者接受答案,因为这会将问题从未回答的列表和API提要中移除。在接受答案时,您不必担心偏袒——只需选择一种最有帮助或解释性的想法。
const data = [
{"id":"1", "sender":"user1", "receiver":"user2", "msg":"hello!"},
{"id":"2", "sender":"user2", "receiver":"user1", "msg":"yo!"},
{"id":"3", "sender":"user3", "receiver":"user1", "msg":"hi!!"},
{"id":"4", "sender":"user1", "receiver":"user3", "msg":"hmm"},
];

function filterData(data) {
    return data.filter((x) => (x.sender === 'user1' && x.receiver === 'user2') || (x.sender === 'user2' && x.receiver ===  'user2'));
}

const result = filterData(data);