Javascript数组过滤使用外部函数结果

时间:2017-11-23 18:14:51

标签: javascript arrays object

var data = [];

data.push({
  Id: 1,
  name: "ONE"
});
data.push({
  Id: 2,
  name: "TWO"
});
data.push({
  Id: 3,
  name: "THREE"
});

data.filter(function(item) {

  if (item.Id == 1) {
    return item.name = display();
  }
});

function display() {
  return "Formatted Text";
}

我正在使用数组filter函数来查找对象数组中的值。我无法在此过滤器中使用display()函数。

编译器一直告诉display()函数是undefined

3 个答案:

答案 0 :(得分:3)

您可以Array#forEach,因为Array#filter会返回包含已过滤项目的数组。

看起来,您想要为条件指定一个新值,因此您不需要新的数组。



function display() {
    return "Formatted Text";
}

var data = [{ Id: 1, name: "ONE" }, { Id: 2, name: "TWO" }, { Id: 3, name: "THREE" }];

data.forEach(function(item) {
    if (item.Id === 1) {
        item.name = display();
    }
});

console.log(data);

.as-console-wrapper { max-height: 100% !important; top: 0; }




答案 1 :(得分:1)

我认为您最好使用findIndex代替filter,例如:

const arrIndex = data.findIndex(function(item) {
   return item.Id==1
});

if(arrIndex !== -1) { data[arrIndex] = display(); }

答案 2 :(得分:0)

试试这个:

var data = [{
    Id: 1,
    name: "ONE"
}, {
    Id: 2,
    name: "TWO"
}, {
    Id: 3,
    name: "THREE"
}];

data.map(function(item) {

    if (item.Id == 1) {
        item.name = display();
    }
    return item;
});

function display() {
    return "Formatted Text";
}