Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.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/arrays/14.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_Arrays_Json_React Native_Object - Fatal编程技术网

Javascript 从两个数组中获取同一对象的数组

Javascript 从两个数组中获取同一对象的数组,javascript,arrays,json,react-native,object,Javascript,Arrays,Json,React Native,Object,第一个是产品的全局列表(比如10个产品),每个产品包含一个代码和大于或等于0的数量。(这很重要) 第二个是产品列表(例如3),每个产品包含一个代码(与第一个表中相同)和一个等于0的数量 我想过滤第一个数组,并拥有一个包含3个乘积的数组,但保留第一个数组的数量 例如: state.Data = [ { "code": "0", "qte": "0"

第一个是产品的全局列表(比如10个产品),每个产品包含一个代码和大于或等于0的数量。(这很重要)

第二个是产品列表(例如3),每个产品包含一个代码(与第一个表中相同)和一个等于0的数量

我想过滤第一个数组,并拥有一个包含3个乘积的数组,但保留第一个数组的数量 例如:

   state.Data = [
        {
            "code": "0",
            "qte": "0"
        },
        {
            "code": "1",
            "qte": "0"
        },
        {
            "code": "2",
            "qte": "14"
        },
        {
            "code": "3",
            "qte": "14"
        },
        {
            "code": "4",
            "qte": "0"
        },
        {
            "code": "5",
            "qte": "0"
        },
        {
            "code": "6",
            "qte": "0"
        },
        {
            "code": "7",
            "qte": "0"
        },
        {
            "code": "8",
            "qte": "0"
        },
        {
            "code": "9",
            "qte": "0"
        }
    ];
    action.value.Data = [
        {
            "code": "0",
            "qte": "0"
        },
        {
            "code": "2",
            "qte": "0"
        },
        {
            "code": "3",
            "qte": "0"
        }
    ];
 // what I want:
    result = [
        {
            "code": "0",
            "qte": "0"
        },
        {
            "code": "2",
            "qte": "14"
        },
        {
            "code": "3",
            "qte": "14"
        }
    ];
action.value.Data和result之间的差异是每个产品的qte

我试过:

  const mainData = [...action.value.Data,...state.Data];
  var catData = mainData.reduce((p, c) => {
    p[c.code] = (p[c.code] || 0) ;
    return p;
  }, {});
  
  var result = mainData.filter((obj) => {
    return catData[obj.code] >= 0;
  });
nextState = {
  ...state,

  Data: result,
}

但是
result
表给了我6个产品,而不是3个(总是双精度的),并且
qte
总是0,所以如何过滤
state.Data
数组,并只保留与
action.value.Data
数组中代码相同的产品,我实际上无法理解代码的逻辑。解决方案非常简单

// step 1: getting keys
const keys = action.value.Data.map(v => v.code)

// step 2: filter values with these keys
const values = state.Data.filter(v => keys.includes(v.code))

就这样

我实际上无法理解您代码的逻辑。解决方案非常简单

// step 1: getting keys
const keys = action.value.Data.map(v => v.code)

// step 2: filter values with these keys
const values = state.Data.filter(v => keys.includes(v.code))

就是这样

您可以根据
action.value.Data
中的
code
s筛选全局产品,但您也可以尝试以下解决方案以避免嵌套循环

创建一个映射,将
code
作为键,
qte
作为值,并在映射
action.value.Data
时使用它

const全局=[{
“代码”:“0”,
“qte”:“0”
},
{
“代码”:“1”,
“qte”:“0”
},
{
“代码”:“2”,
“qte”:“14”
},
{
“代码”:“3”,
“qte”:“14”
},
{
“代码”:“4”,
“qte”:“0”
},
{
“代码”:“5”,
“qte”:“0”
},
{
“代码”:“6”,
“qte”:“0”
},
{
“代码”:“7”,
“qte”:“0”
},
{
“代码”:“8”,
“qte”:“0”
},
{
“代码”:“9”,
“qte”:“0”
}
];
常数bla=[{
“代码”:“0”,
“qte”:“0”
},
{
“代码”:“2”,
“qte”:“0”
},
{
“代码”:“3”,
“qte”:“0”
}
];
constcodevsqty=newmap(global.Map({code,qte})=>[code,qte]);
const result=bla.map(({code})=>({code,qte:codevskty.get(code}));

console.log(result)
您可以根据
action.value.Data
中的
code
s筛选全局产品,但也可以尝试以下解决方案以避免嵌套循环

创建一个映射,将
code
作为键,
qte
作为值,并在映射
action.value.Data
时使用它

const全局=[{
“代码”:“0”,
“qte”:“0”
},
{
“代码”:“1”,
“qte”:“0”
},
{
“代码”:“2”,
“qte”:“14”
},
{
“代码”:“3”,
“qte”:“14”
},
{
“代码”:“4”,
“qte”:“0”
},
{
“代码”:“5”,
“qte”:“0”
},
{
“代码”:“6”,
“qte”:“0”
},
{
“代码”:“7”,
“qte”:“0”
},
{
“代码”:“8”,
“qte”:“0”
},
{
“代码”:“9”,
“qte”:“0”
}
];
常数bla=[{
“代码”:“0”,
“qte”:“0”
},
{
“代码”:“2”,
“qte”:“0”
},
{
“代码”:“3”,
“qte”:“0”
}
];
constcodevsqty=newmap(global.Map({code,qte})=>[code,qte]);
const result=bla.map(({code})=>({code,qte:codevskty.get(code}));

console.log(result)
这可以用一个班轮轻松完成。您只需过滤第一个数组,检查第二个数组中有哪些项:

const result=state.Data.filter({code})=>
action.value.Data.some(x=>x.code==code))
console.log(结果)

您可以准确地获得所需的值。

只需一行即可轻松完成此操作。您只需过滤第一个数组,检查第二个数组中有哪些项:

const result=state.Data.filter({code})=>
action.value.Data.some(x=>x.code==code))
console.log(结果)
您得到的正是您想要的值。

const state={数据:[
{“代码”:“0”,“qte”:“0”},{“代码”:“1”,“qte”:“0”},{“代码”:“2”,“qte”:“14”},{“代码”:“3”,“qte”:“14”},
{“代码”:“4”,“qte”:“0”},{“代码”:“5”,“qte”:“0”},{“代码”:“6”,“qte”:“0”},{“代码”:“7”,“qte”:“0”},
{“代码”:“8”,“qte”:“0”},{“代码”:“9”,“qte”:“0”}
]},
操作={值:{数据:[
{“代码”:“0”,“qte”:“0”},{“代码”:“2”,“qte”:“0”},{“代码”:“3”,“qte”:“0”}
]}};
const res=state.Data.filter(o=>action.value.Data.some(a=>a.code==o.code));
console.log(res)
const state={数据:[
{“代码”:“0”,“qte”:“0”},{“代码”:“1”,“qte”:“0”},{“代码”:“2”,“qte”:“14”},{“代码”:“3”,“qte”:“14”},
{“代码”:“4”,“qte”:“0”},{“代码”:“5”,“qte”:“0”},{“代码”:“6”,“qte”:“0”},{“代码”:“7”,“qte”:“0”},
{“代码”:“8”,“qte”:“0”},{“代码”:“9”,“qte”:“0”}
]},
操作={值:{数据:[
{“代码”:“0”,“qte”:“0”},{“代码”:“2”,“qte”:“0”},{“代码”:“3”,“qte”:“0”}
]}};
const res=state.Data.filter(o=>action.value.Data.some(a=>a.code==o.code));

console.log(res)
Danielo515击败我,干得好!:达尼洛515击败我,干得好D