Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.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 尝试筛选数组中的项时,变量返回为未定义_Javascript_Reactjs - Fatal编程技术网

Javascript 尝试筛选数组中的项时,变量返回为未定义

Javascript 尝试筛选数组中的项时,变量返回为未定义,javascript,reactjs,Javascript,Reactjs,我有一个使用本地状态的组件,它工作正常,但试图在redux中实现它,结果返回为未定义。比较这两个阵列并只接收非当前用户的用户的最佳解决方案是什么 import { FETCH_USERS_TO_ADD } from './types'; import axios from 'axios' export const fetchUsersToAdd = () => dispatch => { var userBox = []; var newUserBox = []; let newU

我有一个使用本地状态的组件,它工作正常,但试图在redux中实现它,结果返回为未定义。比较这两个阵列并只接收非当前用户的用户的最佳解决方案是什么

import { FETCH_USERS_TO_ADD } from './types';
import axios from 'axios'

export const fetchUsersToAdd = () => dispatch => {
var userBox = [];
var newUserBox = [];
let newUserIds = {};
let newUsersArr = [];

    axios.all([
        axios.get('/updateUserList'),
        axios.get('/userInformation')
        ])
        .then(axios.spread((newUsers, currentUsers) => {
            userBox.push(newUsers.data)
            console.log('userbox '+ userBox)
            newUserBox.push(currentUsers.data)
            console.log('newuserbox ' + newUserBox)
// Save all user Ids in object
            for (let newUser of newUserBox){
                newUserIds[newUser.id] = newUser.id
                console.log( 'these are uxser ids' + newUser.id)
              }
// Compare new users with previous user ids and push new users in an array
              for (let user of userBox){
                if(!newUserIds[user.staffID]){
                console.log(user)
                  newUsersArr.push(user)
                  console.log('new user arr' + newUsersArr)
                }

              }
              dispatch({
                type: FETCH_USERS_TO_ADD,
                payload: newUsersArr
            })
        }))


}
记录ID时,它们在for循环中返回为未定义。我想比较用户,如果他们不在userBox数组中(通过Id检查),则将他们发送到新用户数组

正确的解决方案在过滤后仅提供两项:

     0: Array(9)
0: {staffID: 1, dept: "Junior Web Developer", email: "manasaN@tpionline.com", name: "manasa", password: "$2y$10$/zYS7OhzwdLOi6Slzc3Rv.aJdy1J6MjnLCN24GmZ3rMHWUS"}
1: {staffID: 2, dept: "Web Developer", email: "juliof@tpionline.net", name: "Julio Fajardo", password: "$2y$10$MphAC8aRY2uzs1ZEduvCqK1/1nd7t0KukEkvGbx5Y4van.Da6"}
2: {staffID: 3, dept: "Fake Title", email: "johnf@tpionline.com", name: "John Fester", password: "$2y$10$/oa/ESQmhhc5WvxrQKoUU.PjdZY5FccilGfCUL5eyeOU5IDSa"}
3: {staffID: 5, dept: "Fake Title", email: "fakeguy@gmail.net", name: "Test", password: "$2y$10$VWnnw5gRTN2absWos04fsOixW6dbFqsFZL8oPiJm"}
4: {staffID: 6, dept: "Conf room", email: "conf2@gmail.com", name: "Conf 1st floor", password: "$2y$10$KAZa1k2Sd/rg6dnVeqw4duB/XbAdze6Zle3ZhcMaRphloG."}
5: {staffID: 8, dept: "Fake Title", email: "newguy@gmail.net", name: "New guy", password: ""}
6: {staffID: 9, dept: "Fake Title", email: "nguy@gmail.net", name: "New Guy2", password: ""}
7: {staffID: 20, dept: "Erwing", email: "erwingh@tpionline.com", name: "Erwing Hernandez", password: "$2y$10$RWgOBbUHojgmyk3behYhd.kzdFEiH.6d70pS5q5Gf3ZYEa"}
8: {staffID: 12, dept: "Conf room", email: "cristinab@tpionline.com", name: "Cristina Bermudez", password: "$2y$10$92I6fSJY6OW001cdaeF5tdHBjWHBmoCvX1RnfhTspjpBa"}


    0: {id: 1, firstName: "Elton", lastName: "Frederick", departmentId: 1, admin: true, …}
1: {id: 2, firstName: "Julio", lastName: "Probando", departmentId: 1, admin: false, …}
2: {id: 3, firstName: "Corey", lastName: "Chris", departmentId: 2, admin: false, …}
3: {id: 4, firstName: "Daisy", lastName: "Ramos", departmentId: 3, admin: false, …}
4: {id: 5, firstName: "Test", lastName: "User", departmentId: 0, admin: false, …}
5: {id: 6, firstName: "Tes2t", lastName: "Use2r", departmentId: 3, admin: false, …}
6: {id: 7, firstName: "Air Car Hotel", lastName: "Nunca", departmentId: 4, admin: false, …}
7: {id: 8, firstName: "Jenn", lastName: "Lee", departmentId: 4, admin: false, …}
8: {id: 9, firstName: "Reyna", lastName: "Pagan", departmentId: 5, admin: false, …}
9: {id: 10, firstName: "Ameilia", lastName: "Rodriguez", departmentId: 6, admin: false, …}
我应该以

 0: {staffID: 20, dept: "Erwing", email: "erwingh@tpionline.com", name: "Erwing Hernandez", password: "$2y$10$RWgOBbUHojgmyk3behYhd.kzdFEiH.6BBaxn4B070pS5q5Gf3ZYEa"}
1: {staffID: 12, dept: "Test ADD", email: "cristinab@tpionline.com", name: "Cristina Bermudez", password: "$2y$10$92I6fSJY6OW001caJJmeReHnaeF5tdHBjWHBmoCvX1RnfhTspjpBa"}
1.)删除了axios.spread(),并替换为常规ol'ES6方式

2.)删除第一个循环,并使用ES6集合而不是对象。我们处理的是唯一ID(set)的集合,而不是键/值对(object)。对象也可以正常工作,但不能真正描述正在发生的事情。还有更多行:)。我们为
Set
id数组传递构造函数
Map()
返回一个经过转换的数组,所以我们正在映射
newUserBox
并返回一个只包含id的新数组,并将其传递到一个新集合中


3.)拆下了第二个回路,该回路应安装在滤芯上。像#2,我们为Set+map函数生成了一个通用循环/全局变量,这里我们可以使用一个已经存在的函数:filter,而不是一个通用循环来过滤。筛选器接受一个回调,该回调传递给数组中的每个项。返回一个新数组,其中只包含回调返回true的项。因此,在这种情况下,我们只保留带有标记的项目,该标记包含在
newUserIds
.has()返回true或false

我用它应该返回的信息更新了帖子,这不会返回我要找的内容。只要稍微调整一下,如果仍然有问题,请尝试发布你的newUsers/currentUsers进行比较

import { FETCH_USERS_TO_ADD } from './types';
import axios from 'axios'

export const fetchUsersToAdd = () => dispatch => {
    axios.all([
        axios.get('/updateUserList'),
        axios.get('/userInformation')
        ])
        .then(([newUserBox, currentUserBox]) => {
              const newUserIds = new Set(newUserBox.map(({ id }) => id));
              dispatch({
                type: FETCH_USERS_TO_ADD,
                payload: currentUserBox.filter(({ staffID }) => newUserIds.has(staffID))
            })
        })
}