JSFiddle - React, Tailwind, and code Playground
by Masaki Moriwaki
HTML
<div id="results">
</div>
Babel + JSX
'use strict';
const offers = [
{name: '一泊', price: 3000, _unit: '1d', priceCurrency: 'JPY'},
{name: '一週間', price: 18900, _unit: '7d', priceCurrency: 'JPY'},
{name: '30日', price: 72000, _unit: '30d', priceCurrency: 'JPY'}
];
const startTime = new Date(2016, 1, 2, 0, 0, 0, 0);
const endTime = new Date(2016, 1, 18, 0, 0, 0, 0);
const duration = (endTime - startTime) / (1000 * 60 * 60 * 24);
let price;
let queue = [];
let result;
//
offers.forEach(offer => {
queue.push([offer]);
});
while (queue.length > 0) {
let node = queue.shift();
let total = node.reduce((previous, current) => {
return {
price: previous.price + current.price,
duration: previous.duration + parseInt(current._unit, 10)
};
}, {price: 0, duration: 0})
if (duration > total.duration) {
let tail = node.pop();
offers.forEach(row => {
if (parseInt(tail._unit, 10) >= parseInt(row._unit, 10)) {
queue.push([].concat(node, tail, row));
}
});
continue;
}
if ((!price || price >= total.price) && duration <= total.duration) {
price = total.price;
result = node;
}
}
document.getElementById('results').innerHTML = price;
console.log(result);