#javascript #object #ecmascript-6
Вопрос:
Я хочу рассчитать значения предыдущих дат до текущей даты и так далее. Вот мой сценарий.
- Я уже получил стоимость акций за предыдущий день для первоначального предварительного запаса, т. е.
let prevStock = 21
let prevStock = 21;
let stocksArr= [
{ date: '2021-06-30',stock: 4 },
{ date: '2021-07-01',stock: 5 },
{ date: '2021-07-02',stock: 2 },
{ date: '2021-07-03',stock: 1 },
{ date: '2021-07-04', stock: 5 },
{ date: '2021-07-05',stock: 3 },
{ date: '2021-07-06', stock: 4 },
{ date: '2021-07-07',stock: 1 },
{ date: '2021-07-08', stock: 4 }
]
stocksArr.reduce((acc, cur, idx, arr) => {
const prod = idx === 0 ? 0 : arr[idx - 1].stock;
const value = acc cur.stock prod;
cur.stock = acc;
return value;
}, prevStock);
console.log(stocksArr)
Ожидаемые результаты:
[{ date: '2021-06-30',stock: 21 },
{ date: '2021-07-01',stock: 24 },
{ date: '2021-07-02',stock: 29 },
{ date: '2021-07-03',stock: 31 },
{ date: '2021-07-04', stock: 32 },
{ date: '2021-07-05',stock: 37 },
{ date: '2021-07-06', stock: 40 },
{ date: '2021-07-07',stock: 44 },
{ date: '2021-07-08', stock: 45 }]
Какое правильное решение для ее решения?
let prevStock = 21;
let stocksArr= [
{ date: '2021-06-30',stock: 4 },
{ date: '2021-07-01',stock: 5 },
{ date: '2021-07-02',stock: 2 },
{ date: '2021-07-03',stock: 1 },
{ date: '2021-07-04', stock: 5 },
{ date: '2021-07-05',stock: 3 },
{ date: '2021-07-06', stock: 4 },
{ date: '2021-07-07',stock: 1 },
{ date: '2021-07-08', stock: 4 }
]
stocksArr.reduce((acc, cur, idx, arr) => {
const prod = idx === 0 ? 0 : arr[idx - 1].stock;
const value = acc cur.stock prod;
cur.stock = acc;
return value;
}, prevStock);
console.log(stocksArr)
Ответ №1:
если вы хотите получить совокупные результаты, вот ответ
var stocksArr= [
{ date: '2021-06-30',stock: 4 },
{ date: '2021-07-01',stock: 5 },
{ date: '2021-07-02',stock: 2 },
{ date: '2021-07-03',stock: 1 },
{ date: '2021-07-04', stock: 5 },
{ date: '2021-07-05',stock: 3 },
{ date: '2021-07-06', stock: 4 },
{ date: '2021-07-07',stock: 1 },
{ date: '2021-07-08', stock: 4 }
]
var result = stocksArr.reduce(function(r, a) {
if (r.length > 0)
a.stock = r[r.length - 1];
r.push(a.stock);
a['sum'] = a.stock
return r;
}, [21]); // <-- pass intialValue to here
console.log(stocksArr)
[
{
"date": "2021-06-30",
"stock": 25,
"sum": 25
},
{
"date": "2021-07-01",
"stock": 30,
"sum": 30
},
{
"date": "2021-07-02",
"stock": 32,
"sum": 32
},
{
"date": "2021-07-03",
"stock": 33,
"sum": 33
},
{
"date": "2021-07-04",
"stock": 38,
"sum": 38
},
{
"date": "2021-07-05",
"stock": 41,
"sum": 41
},
{
"date": "2021-07-06",
"stock": 45,
"sum": 45
},
{
"date": "2021-07-07",
"stock": 46,
"sum": 46
},
{
"date": "2021-07-08",
"stock": 50,
"sum": 50
}
]
Комментарии:
1. Спасибо за ответ. одинаковые значения накопления должны быть указаны в соответствующие даты.
2. ТАКИМ образом, ожидается, что тот же массив объектов вернется. Следите при уменьшении, чтобы исходный массив объектов не мутировал
3. @mplungjan он должен принимать мои инициализированные значения, которые
let prevStock = 21;
4. @подчеркивание
a= a.stock
; это будет работать вместо»a [«сумма»»] = a.запас. I want notify you that my initial value is
пусть prevStock = 21; » необходимо учитывать первые результаты5. @Jay пожалуйста, проверьте обновленный код. вы можете просто передать значение Intial в функцию редуктора после обратного вызова