我有两个javascript数组
var openDates = ["6/14/2015", "6/15/2015", "6/16/2015", "6/17/2015", "6/18/2015", "6/19/2015", ...]
var entries = ["6/16/2015", "6/16/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", ...]
如何计算格式中条目中出现 openDates 的次数..
var entriesPerDay = [0, 0, 10, 2, 16, 18, 20, ...]
我安装了lodash,但无法弄明白。如果没有匹配,我需要返回0值。
答案 0 :(得分:1)
到目前为止我能想到什么。
var openDates = ["6/14/2015", "6/15/2015", "6/16/2015", "6/17/2015", "6/18/2015", "6/19/2015"]
var entries = ["6/16/2015", "6/16/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015"]
var entriesPerDay = [];
for(var i = 0; i < openDates.length; i++) {
var currDate = openDates[i];
var temp = _.filter(entries, function(date) {
return date === currDate;
});
entriesPerDay.push(temp.length);
}
对于上面的例子,entriesPerDay是这样的:[0,0,2,0,42,0]
PS:我正在使用lodash,正如你所说的那样,你有lodash。
PPS:如果有效,请接受并支持。
答案 1 :(得分:1)
以下示例将帮助您开始并了解如何实现这一目标。
在此示例中,forEach正在数组上用于比较值。
var openDates = ["6/14/2015", "6/15/2015", "6/16/2015", "6/17/2015", "6/18/2015", "6/19/2015"]
var entries = ["6/16/2015", "6/16/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015"]
function countEntries(arr1, arr2) {
var count, total = [];
arr1.forEach(function(date) {
count = 0;
arr2.forEach(function(entry) {
count += date == entry ? 1 : 0;
});
total.push(count);
});
return total;
}
console.log(countEntries(openDates, entries));
这里我们只是运行一个forEach循环并重置每次迭代的计数。请参阅以下输出:
输出:[0, 0, 2, 0, 42, 0]
答案 2 :(得分:0)
对于O(n)解决方案而不是(On ^ 2):
var openDates = ["6/14/2015", "6/15/2015", "6/16/2015", "6/17/2015", "6/18/2015", "6/19/2015"];
var entries = ["6/16/2015", "6/16/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015"];
function countEntries(open, existing) {
var openHash = {};
var entriesHash = {};
for(var i = 0; i < open.length; i ++){
openHash[open[i]] = 0;
}
for(i = 0; i < existing.length; i ++){
if(entriesHash.hasOwnProperty(entries[i])){
entriesHash[entries[i]] ++;
}else{
entriesHash[entries[i]] = 1;
}
}
var result = [];
for(var date in openHash){
if(openHash.hasOwnProperty(date)){
if(entriesHash[date]){
openHash[date] = entriesHash[date];
}
result.push(openHash[date]);
}
}
return result;
}
console.log(countEntries(openDates, entries));
答案 3 :(得分:0)
您可以使用lodash的.countBy() 和 .at()来完成此操作。您可以使用_.pick()而不是_.at()来获取具有找到的条目(至少出现1次)的对象作为属性名称。
复杂性 - O(n)。
var openDates = ["6/14/2015", "6/15/2015", "6/16/2015", "6/17/2015", "6/18/2015", "6/19/2015"];
var entries = ["6/16/2015", "6/16/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015", "6/18/2015"];
var counts = _(entries)
.countBy(function(entry) { return entry }) // count the number of occurances of each entry
.at(openDates) // get the values of the keys that appear in openDates
.map(function(count) { return count || 0 }) // map undefined (not found) t0 0
.value(); // get the values
var countsObject = _(entries)
.countBy(function(entry) { return entry }) // count the number of occurances of each entry
.pick(openDates) // get the values of the keys that appear in openDates
.value(); // get the values
document.write('_.at(): ' + JSON.stringify(counts));
document.write('<br />');
document.write('_.pick(): ' + JSON.stringify(countsObject));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.10.1/lodash.js"></script>
答案 4 :(得分:-1)