我希望 $foos = DB::table('foo')
->where('name', 'LIKE', '%' . $query . '%')
->orWhere('description', 'LIKE', '%' . $query . '%')
->orWhere('address_city', 'LIKE', '%' . $query . '%')
->orWhere('short_description', 'LIKE', '%' . $query . '%')
->orWhere('interview', 'LIKE', '%' . $query . '%')
->get();
$foos = $foos->where('active', true)->get();
显示renderData()
的值。当我在max
中console.log(max)
时,它会显示三个JSON对象中的所有三个最大值。但是,当我在calculateData()
中返回max
时,它只会显示第一个值。为什么这样,我该怎么做才能让它显示所有三个值而不是一个?注意:renderData()
是传递的对象的json列表。谢谢!
data
答案 0 :(得分:1)
也许这就是你想要的?它将遍历整个数据对象,计算每次迭代的最大值,将它们收集到一个数组中,最后用该数组调用renderData函数。
function calculateData(data) {
var maxes = [];
for (i in data) {
var arr = [];
var max;
var obj = data[i].tones;
obj.map(function(item) {
var data = item.score;
arr.push(data);
})
maxes.push(arr.reduce(function(a, b) {
return Math.max(a, b);
}));
}
return renderData(maxes);
}
function renderData(max) {
console.log(max);
};
答案 1 :(得分:0)
我创建了第二个数组finalArray
并将每个最大值推入其中:
function calculateData(data) {
var finalArr = [];
for (i in data) {
var arr = [];
var max;
data[i].tones.map(function(item) {
arr.push(item.score);
})
var max = arr.reduce(function(a, b) {
return Math.max(a, b);
});
finalArr.push(max);
//Returns an array containing dominant [emotion_tone, language_tone, social_tone]
// return renderData(max);
}
renderData(finalArr);
}
function renderData(finalArr) {
console.log(finalArr);
};
感谢您的帮助!
答案 2 :(得分:0)
出现错误是因为循环中的return
语句会中止整个函数,因此也会中止循环。但是整个功能可以简化/缩短:
正如评论中所提到的,不要在循环中定义函数(除非它是不可避免的),在循环之前定义。我通过在代码中定义函数getScore
和max
来完成此操作。
//ES6
function calculateData(data) {
var getScore = item => item.score,
max = (a,b) => Math.max(a,b),
maxima = Object.values(data)
.map(value => value.tones.map(getScore).reduce(max));
return renderData(maxima);
}
//Or maybe you're more comfortable without Arrow functions
function calculateData(data) {
function getScore(item){ return item.score }
function max(a,b){ return Math.max(a,b) }
var maxima = Object.values(data).map(function(value){
return value.tones.map(getScore).reduce(max)
});
return renderData(maxima);
}
代码的唯一区别是Object.values()
只返回对象的自己的值,而for..in
遍历对象的所有值,拥有和继承。