Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.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_Join_Break_Coalesce - Fatal编程技术网

JAVASCRIPT中的联合连接

JAVASCRIPT中的联合连接,javascript,arrays,join,break,coalesce,Javascript,Arrays,Join,Break,Coalesce,我正试图用一些类似于SQL的“合并”函数在Javascript中连接几个数组 以下是我的阵列: var items = [ {itemid: 'A'}, {itemid: 'B'}, {itemid: 'C'}, {itemid: 'D'}, {itemid: 'E'} ]; var specials = [ {itemid: 'A', price: '5.00'}, {itemid: 'C', price: '5.00'}, {

我正试图用一些类似于SQL的“合并”函数在Javascript中连接几个数组

以下是我的阵列:

var items = [
    {itemid: 'A'},
    {itemid: 'B'},
    {itemid: 'C'},
    {itemid: 'D'},
    {itemid: 'E'}
];

var specials = [
    {itemid: 'A', price: '5.00'},
    {itemid: 'C', price: '5.00'},
    {itemid: 'E', price: '5.00'}
];

var mainprices = [
    {itemid: 'A', price: '10.00'},
    {itemid: 'B', price: '10.00'},
    {itemid: 'C', price: '10.00'},
    {itemid: 'D', price: '10.00'},
    {itemid: 'E', price: '10.00'}
];
我想要的是: 我的第一列是itemid
我的第二个专栏是价格

我希望price列首先从我的“特价””数组中检索价格,然后对于没有值的行,从我的“mainprices”数组中返回价格

以下是我迄今为止所尝试的:

var results = [];
for (var i=0; i<items.length; i++) {
    var found = false;
    for (var j=0; j<specials.length; j++) {
        if (items[i].itemid === specials[j].itemid) {
            results.push({
                item_id: items[i].itemid, 
                price_value: specials[j].price
            });
            found = true;
            break;
        }
    }
    if (found === false) {
        results.push({
            item_id: items[i].itemid, 
            price_value: null
        });    
    }
}

console.log(results);
我现在想做的是用“mainprices.price”值替换空值

如果有人能帮助我,我将不胜感激


干杯

您可以
.map
映射
mainPrices
数组,并在
特价中搜索匹配的元素

var项目=[
{itemid:'A'},
{itemid:'B'},
{itemid:'C'},
{itemid:'D'},
{itemid:'E'}
];
变量特殊值=[
{itemid:'A',price:'5.00'},
{itemid:'C',price:'5.00'},
{itemid:'E',price:'5.00'}
];
var价格=[
{itemid:'A',price:'10.00'},
{itemid:'B',price:'10.00'},
{itemid:'C',price:'10.00'},
{itemid:'D',price:'10.00'},
{itemid:'E',price:'10.00'}
];
const pricesWithSpecials=mainprices.map({itemid,price})=>{
const found=specials.find((e)=>e.itemid==itemid);
返回{itemid,price:found?found.price:price};
});

控制台日志(价格特殊)
您可以通过构建
itemid
price
的字典来实现这一点。要构建字典,请在同一数组中列出价格,最重要的列在最后,以便它们在构建字典时覆盖以前的条目

从本词典中,您可以很容易地获得
itemid
的价格,并且您可以通过映射项目来生成输出

您可以将此逻辑封装在一个可重用函数中,该函数可以接受任意数量的price数组。您只需按重要性为这些数组提供数据,最重要的数据在右边

const项=[
{itemid:'A'},
{itemid:'B'},
{itemid:'C'},
{itemid:'D'},
{itemid:'E'}
];
常量特价=[
{itemid:'A',price:'5.00'},
{itemid:'C',price:'5.00'},
{itemid:'E',price:'5.00'}
];
常量价格=[
{itemid:'A',price:'10.00'},
{itemid:'B',price:'10.00'},
{itemid:'C',price:'10.00'},
{itemid:'D',price:'10.00'},
{itemid:'E',price:'10.00'}
];
const superImportantPrices=[
{itemid:'B',price:'15.00'}
];
const coalesce=(项目,…价格)=>{
const pricesDict=prices.flat().reduce((acc,{itemid,price})=>{
acc[itemid]=价格;
返回acc;
}, {});
返回items.map({itemid})=>({itemid,price:pricesDict[itemid]}));
}
//将最重要的价格合并到右边
const result=合并(项目、主要价格、特价、重要价格);

控制台日志(结果)非常感谢您的帮助!我对JavaScript相当陌生。非常感谢你的帮助。祝你有美好的一天!
[{item_id: "A", price_value: "5.00"}, {item_id: "B", price_value: null}, {item_id: "C", price_value: "5.00"}, {item_id: "D", price_value: null}, {item_id: "E", price_value: "5.00"}]