提问者:小点点

JavaScript-基于关闭条件将项推入数组


我正在循环通过我的2维数组,并将这些项目推入一个带有对象标题的新数组。 我正在尝试根据一个条件更改对象的名称。

索引1确定此项目在其类别中的等级。 我想组织我的新数组,并有一个读数如下的条件

    if(data[0][1] === 1) { 
    ' firstRank': data[i][1] 
    } else if (data[0][1] === 2) {
   'secondRank': data[i][1]
   } else if (data[0][1] === 3) {
   'thirdRank': data[i][1]
   }

下面是我的代码示例:

null

const data = [
["Online", 1 ,3.2 ], 
["Appointment", 2 , 2.9],
["Store", 3, 1.8],
] ;

const newData = []

for (let i = 0; i < data[0].length; i++) {
        newData.push({
            'title': data[i][0],
            'rank': data[i][1],
            'percentage': data[i][2],
        })
    }
    
    
    console.log(newData)

null

我的预期结果是newdata数组将对象秩返回为firstRank,secondRank或thirdRank,这取决于条件中的值等于什么。 我已经尝试包括这个排名在我的for循环,但我得到了语法错误。 下面是我所尝试的:

       for (let i = 0; i < data[0].length; i++) {
            newData.push({
         'title': data[i][0],
        if(data[0][1] === 1) { 
        ' firstRank': data[i][1] 
       } else if (data[0][1] === 2) {
      'secondRank': data[i][1]
      } else if (data[0][1] === 3) {
       'thirdRank': data[i][1]
         }
        'percentage': data[i][2],
            })
        }

共3个答案

匿名用户

您可能希望使用if语句构造对象,然后将其推送到数组上。

for (let i = 0; i < data[0].length; i++) {
    // start with what we *know* is going to go into the object
    const myObj = {
        'title': data[i][0],
        'percentage': data[i][2],
    };
    // add additional parts to it based on conditions
    if (data[0][1] === 1) {
        myObj.firstRank = data[i][1];
    } else if (data[0][1] === 2) {
        myObj.secondRank = data[i][1];
    } else if (data[0][1] === 3) {
        myObj.thirdRank = data[i][1];
    }
    // object all ready, add it to the array!
    newData.push(myObj);
}

匿名用户

您可以使用map并在map内创建对象:

const data = [
["Online", 1 ,3.2 ], 
["Appointment", 2 , 2.9],
["Store", 3, 1.8],
] ;

const newData = []

data.map(el => {
  myObj = {
    title: el[0],
    percentage: el[2],
  };
    if(el[1] === 1) {
    myObj['firstRank'] = el[1];
  } else if (el[1] === 2) {
    myObj['secondRank'] =el[1];
  } else if (el[1] === 3) {
    myObj['thirdRank'] = el[1];
  }
  newData.push(myObj);
});

匿名用户

您知道每个元素的位置:标题,等级和百分比。

标题是第一个元素,百分比是最后一个元素,排名是第一个和最后一个元素之间的元素。

因此,您可以这样做,其中rank将是一个值数组,其中rank-nth与be数组位置-nth+1:

null

const data = [
  ["Online", 1 ,3.2 ], 
  ["Appointment", 2 , 4, 5, 2.9],
  ["Store", 3, 1.8],
];

const newData = data.map((row) => {
  
  const title = row[0];
  const rank = row.slice(1, row.length-1);
  const percentage = row[row.length - 1];

  return {
    title,
    rank,
    percentage
  }
})

console.log(newData);