Javascript数组检查值并分配到数组中

Javascript数组检查值并分配到数组中,javascript,angularjs,arrays,Javascript,Angularjs,Arrays,因此,我有一个PHP函数,它将读取csv文件,然后将其传递给angularJS 在csv文件中,有4种类型的数据 [0] => Number, [1] => Code, [2] => Description, [3] => Qty 然而,也有“面积”数据。“区域”将位于“编号”[2] 这是一个例子 //Part 1 "","","Area 1","" "No","Code","Description","QTY" "No","Code","Description","Q

因此,我有一个PHP函数,它将读取csv文件,然后将其传递给angularJS

在csv文件中,有4种类型的数据

[0] => Number,
[1] => Code,
[2] => Description,
[3] => Qty
然而,也有“面积”数据。“区域”将位于“编号”[2]

这是一个例子

//Part 1
"","","Area 1",""
"No","Code","Description","QTY"
"No","Code","Description","QTY"
"No","Code","Description","QTY"
"No","Code","Description","QTY"
"No","Code","Description","QTY"
//Part 2
"","","Area 2",""
"No","Code","Description","QTY"
"No","Code","Description","QTY"
"No","Code","Description","QTY"
"No","Code","Description","QTY"
//And so on
我想实现的是,如何获取该区域,然后通过检查[0]是否为空且[2]是否为空将其推入数组,然后它是数组对象其余部分的区域,一旦它检测到与之前相同的条件,它将为另一部分分配新区域

这是我的数组,称为vm.products

for (var index = 0; index < resp.data.csv.length; index++) {
   vm.products.push({
      code: resp.data.csv[index][1],
      qty: resp.data.csv[index][3], 
      //area: resp.data.csv[index].area,
      description: resp.data.csv[index][2]
   });
}
for(var index=0;index

感谢您提供的帮助:)

首先,您必须检查当前条目是否包含该区域。如果是这样,请将其储存到下一个区域。发生这种情况时,只需将旧区域替换为新区域即可

将产品推送到阵列时,只需使用Area变量,因为它始终包含正确的区域

var area = “”;
for (var index = 0; index < resp.data.csv.length; index++) {
    var current = resp.data.csv[index];
    if (current[2] != “” && (!current[0] || current[0] == "") {
        area = current[2];
    } else {
        vm.products.push({
            code: current[1],
            qty: current[3], 
            area: area,
            description: current[2]
        });
    }
}
var区域=”;
对于(var index=0;index

此解决方案将仅在数组上循环一次,而不是在下面的答案中首先使用映射时循环多次。

首先,您必须检查当前条目是否包含该区域。如果是,请将其存储到下一个区域。如果是,请将旧区域替换为新区域

将产品推送到阵列时,只需使用Area变量,因为它始终包含正确的区域

var area = “”;
for (var index = 0; index < resp.data.csv.length; index++) {
    var current = resp.data.csv[index];
    if (current[2] != “” && (!current[0] || current[0] == "") {
        area = current[2];
    } else {
        vm.products.push({
            code: current[1],
            qty: current[3], 
            area: area,
            description: current[2]
        });
    }
}
var区域=”;
对于(var index=0;index

此解决方案将仅在阵列上循环一次,而不是在下面的答案中首先使用映射时循环多次。

您可以映射并过滤数据:

var area;
var res = arr.map(function (d) {
    if (d[0] == "" && d[2] != null) {
        area = d[2];
        return null;
    }

    return {
        code: d[1],
        qty: d[3],
        area: area,
        description: d[2]
    }

}).filter(function (f) {
    return f;
});

console.log(res);
示例数据的输出:

[ { code: 'Code',
    qty: 'QTY',
    area: 'Area 1',
    description: 'Description' },
  { code: 'Code',
    qty: 'QTY',
    area: 'Area 1',
    description: 'Description' },
  { code: 'Code',
    qty: 'QTY',
    area: 'Area 1',
    description: 'Description' },
  { code: 'Code',
    qty: 'QTY',
    area: 'Area 1',
    description: 'Description' },
  { code: 'Code',
    qty: 'QTY',
    area: 'Area 1',
    description: 'Description' },
  { code: 'Code',
    qty: 'QTY',
    area: 'Area 2',
    description: 'Description' },
  { code: 'Code',
    qty: 'QTY',
    area: 'Area 2',
    description: 'Description' },
  { code: 'Code',
    qty: 'QTY',
    area: 'Area 2',
    description: 'Description' },
  { code: 'Code',
    qty: 'QTY',
    area: 'Area 2',
    description: 'Description' } ]

您可以映射并过滤数据:

var area;
var res = arr.map(function (d) {
    if (d[0] == "" && d[2] != null) {
        area = d[2];
        return null;
    }

    return {
        code: d[1],
        qty: d[3],
        area: area,
        description: d[2]
    }

}).filter(function (f) {
    return f;
});

console.log(res);
示例数据的输出:

[ { code: 'Code',
    qty: 'QTY',
    area: 'Area 1',
    description: 'Description' },
  { code: 'Code',
    qty: 'QTY',
    area: 'Area 1',
    description: 'Description' },
  { code: 'Code',
    qty: 'QTY',
    area: 'Area 1',
    description: 'Description' },
  { code: 'Code',
    qty: 'QTY',
    area: 'Area 1',
    description: 'Description' },
  { code: 'Code',
    qty: 'QTY',
    area: 'Area 1',
    description: 'Description' },
  { code: 'Code',
    qty: 'QTY',
    area: 'Area 2',
    description: 'Description' },
  { code: 'Code',
    qty: 'QTY',
    area: 'Area 2',
    description: 'Description' },
  { code: 'Code',
    qty: 'QTY',
    area: 'Area 2',
    description: 'Description' },
  { code: 'Code',
    qty: 'QTY',
    area: 'Area 2',
    description: 'Description' } ]

你可以这样做

var csvStr=”、“、”区域1“、”\n“否”、“代码”、“描述”、“数量”\n“否”、“代码”、“描述”、“数量”\n“否”、“代码”、“描述”、“数量”\n“否”、“代码”、“描述”、“描述”、“数量”\n“否”、“代码”、“描述”、“区域2”、“数量”\n“否”、“代码”、“描述”、“数量”\n“否”、“代码”、“描述”、“数量”\n“否”、“代码”、“描述”、“数量”\n“否”、“代码”、“描述”、“数量”\n“代码”、“描述”,“数量”,
csvDataArr=csvStr.replace(/“/g,”).split(“\n”).map(s=>s.split(“,”),
地区
csvDataObj=csvDataArr.reduce((p,c)=>{c[0]==“”&&
c[1]==“”&&
c[3]==“”?p[area=c[2]=[]
:p[面积]。按(c);
返回p;
},{});

log(csvDataObj);
您可以这样做

var csvStr=”、“、”区域1“、”\n“否”、“代码”、“描述”、“数量”\n“否”、“代码”、“描述”、“数量”\n“否”、“代码”、“描述”、“数量”\n“否”、“代码”、“描述”、“描述”、“数量”\n“否”、“代码”、“描述”、“区域2”、“数量”\n“否”、“代码”、“描述”、“数量”\n“否”、“代码”、“描述”、“数量”\n“否”、“代码”、“描述”、“数量”\n“否”、“代码”、“描述”、“数量”\n“代码”、“描述”,“数量”,
csvDataArr=csvStr.replace(/“/g,”).split(“\n”).map(s=>s.split(“,”),
地区
csvDataObj=csvDataArr.reduce((p,c)=>{c[0]==“”&&
c[1]==“”&&
c[3]==“”?p[area=c[2]=[]
:p[面积]。按(c);
返回p;
},{});

console.log(csvDataObj);
先生,代码几乎可以完美地工作,但是在没有产品代码的情况下,我怎么能不推入数组?因为根据您编写的代码,它会将空产品代码添加到数组中..:)没问题,更新了我的代码(您需要在else块中移动将产品推入数组的代码)先生,代码现在运行得很好!非常感谢您帮助我这样的初级程序员!非常感谢您的帮助,祝您度过愉快的一天,先生!仍然需要了解更多:)先生,代码几乎运行得很好,但是在没有产品代码的情况下,我怎么能不插入阵列呢?因为根据您编写的代码,它将向数组中添加空产品代码:)没问题,更新了我的代码(您需要将代码移动到else块中的数组中)先生,代码现在工作得很好!非常感谢您帮助像我这样的初级程序员!真的很感激,祝您今天愉快,先生!仍然需要了解更多:)非常感谢您的回复,先生,嗯:)。真的很感激!非常感谢您的回复,先生(嗯:)。真的很感激!