使用javascript检查属性字段和返回数组

vyswwuz2  于 2023-03-16  发布在  Java
关注(0)|答案(1)|浏览(103)

我想知道如何检查属性字段是否为真,然后使用javascript将字符串推到数组中

  • 如果kid为真,则压入字符串kidexists
  • 如果country为真,则压入字符串cnexists
  • 如果details为真,则压入字符串dtsexists

尝试的代码:

var itemList1 = [
  {id:1, kid: true, country: true, details: false},
  {id:2, kid: true, country: false, details: true},
  {id:3, kid: true, country: false, details: false}
]

var itemList2 = [
  {id:1, kid: false, country: true, details: false},
  {id:2, kid: true, country: false, details: false},
]

var r1 = this.result(itemList1)
var r2 = this.result(itemList2)

console.log("R1:", r1);
console.log("R2:", r2);

function result(items){
  let finalResult=[]
  for (let i of items) {
    if (i.kid) {
      finalResult.push('kidexists');
    } else if (i.country) {
      finalResult.push('cnexists');
    } else if (i.details) {
      finalResult.push('dtsexists');
    }
    finalResult =  [...new Set(finalResult)];
    return finalResult;
  }
}

itemList1的预期输出

['kidexists', 'cnexists', 'dtsexists'];

itemList2的预期输出

['kidexists', 'cnexists'];
x8diyxa7

x8diyxa71#

你做错了两件事:
1.返回结果的速度太快。不应将其返回到for列表中,因为其他项将不会被计入
1.在else if中,其他的if从来没有被调用过,因此,值被忽略了。只使用“if”就可以了
运行良好的代码:

var itemList1 = [
  {id:1, kid: true, country: true, details: false},
  {id:2, kid: true, country: false, details: true},
  {id:3, kid: true, country: false, details: false}
]

var itemList2 = [
  {id:1, kid: false, country: true, details: false},
  {id:2, kid: true, country: false, details: false},
]

var r1 = this.result(itemList1)
var r2 = this.result(itemList2)

console.log("R1:", r1);
console.log("R2:", r2);

function result(items){
  let finalResult = new Set();
  for (let i of items) {
    if (i.kid) {
      finalResult.add('kidexists');
    }
    if (i.country) {
      finalResult.add('cnexists');
    }
    if (i.details) {
      finalResult.add('dtsexists');
    }
  }
  return [...finalResult];
}

正如InSync所建议的,finalResult直接是Set(因此,我们使用add而不是push)。

相关问题