Цитата:
|
Цитата:
Недостатки , 1. При указании суммы подгруппы не elem_sum+1 , т.е ne 11 , a 10 , разбивает только на подгруппы с суммой 10 , а в основном массиве остается 1 . 2. Остается пустой массив. Если не трудно , прошу покритиковать , а еще лучше подправить . Я с удовольствием поизучаю рабочий вариант.
<script>
const webstore = new Vue({
el: '#app',
data() {
return {
array_in: [1, 2, 4, 7, 1, 6, 2, 8],
array_original: [],
count_group: 3,
array_out: [],
}
},
created() {
this.getArray(this.array_in, this.count_group);
},
methods: {
getArray(arr, n) {
let arr_out = [];
n = this.count_group;
let arr_clone = [arr_out];
let arr_length = arr.length;
this.array_original = Array.from(this.array_in);
arr.sort((a, b) => b - a);
let elem_sum = parseInt(arr.reduce((x, y) => x + y) / n);
for (let i = 0; i <= n - 1; i++) {
for (let i = 0; i <= arr_length - 1; i++) {
if (arr_out.reduce((x, y) => x + y, 0) + arr[i] <= elem_sum + 1) {
arr_out.splice(0, 0, arr[i]);
delete arr[i];
}
}
if (arr_out.reduce((x, y) => x + y, 0) <= elem_sum + 1) {
arr_out = [] , arr_clone.push(arr_out);
}
}
this.array_out = arr_clone;
}// End Get array
},
}); //End Vue
</script>
|
vue разбить массив на n частей
DzonyB,
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
<div id="app">
<ul>
<li v-for="el of array_out">
{{el}}
</li>
</ul>
</div>
<script>
const webstore = new Vue({
el: '#app',
data() {
return {
array_in: [1, 2, 4, 7, 1, 6, 2, 8],
count_group: 3,
array_out: []
}
},
created() {
this.array_out = this.getArray(this.array_in, this.count_group);
},
methods: {
getArray(arr, size) {
arr = arr.slice().sort((a, b) => b - a);
let arr_current = [];
let arr_calculated = [arr_current];
let average = (arr, size) => Math.trunc(arr.reduce((x, y) => x + y) / size);
for (let i = 0; size; i++) {
let limit = average(arr, size--);
for (let k = 0; k < arr.length;) {
if (limit - arr[k] >= 0) {
limit -= arr[k];
arr_current.push(arr[k]);
arr.splice(k, 1);
} else k++;
}
if(size == 1){
arr_calculated.push(arr);
break;
}
if (arr.length) {
arr_current = [];
arr_calculated.push(arr_current);
}
}
return arr_calculated;
} // End Get array
},
}); //End Vue
</script>
</body>
</html>
|
Рони, Спасибо дружище. Наконец то мы поняли друг друга .:)
С удовольствием буду анализировать ошибки в своем говнокоде, ;) Еще раз спасибо. |
DzonyB,
#23 добавил немного "косметики" :) |
Цитата:
|
| Часовой пояс GMT +3, время: 17:18. |