我有一个对象,该对象的数字值分配给键
<div id="mainPanel">
<div id="header">
<div class="headCell">1</div>
<div class="headCell">2</div>
<div class="headCell">3</div>
<div class="headCell">4</div>
<div class="headCell">5</div>
<div class="headCell weekend">6</div>
<div class="headCell weekend">7</div>
<div class="headCell">8</div>
<div class="headCell">9</div>
<div class="headCell">10</div>
<div class="headCell">11</div>
<div class="headCell">12</div>
<div class="headCell weekend">13</div>
<div class="headCell weekend">14</div>
<div class="headCell">15</div>
<div class="headCell">16</div>
<div class="headCell">17</div>
<div class="headCell">18</div>
<div class="headCell">19</div>
<div class="headCell weekend">20</div>
</div>
<div id="panelBody">
Here is some text that will appear in the main div. I am hoping to see this not moved around and that the grey weekend lines will appear underneath the text.
</div>
</div>
我想将每个数字减为零,以便每个键具有该范围内的所有值,即:
obj1 = {a : 10
b : 5
c : 6 }
ive尝试了.map,.apply和其他几次迭代尝试。我该怎么做?
答案 0 :(得分:1)
您可以创建对象条目的数组,然后使用reduce()
创建结果对象:
const obj1 = {
a: 10,
b: 5,
c: 6
};
const obj2 = Object.entries(obj1).reduce((a, [k, v]) => ({
...a,
[k]: Array(v + 1).fill(0).map(_ => v--)
}), {});
console.log(obj2);
答案 1 :(得分:1)
这是一个简单得多的解决方案:
const obj1 = { a: 5, b: 6, c: 3 };
let obj2;
Object.keys(obj1)
.forEach((key) => {
const size = obj1[key];
obj2[key] = new Array(size + 1)
.fill(0)
.map((val, index) => size - index);
});
console.log(obj2);
由此获得的结果将采用以下格式:
{
a: [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0],
b: [5, 4, 3, 2, 1, 0],
c: [6, 5, 4, 3, 2, 1, 0],
}
答案 2 :(得分:0)
let obj1 = {
a: 10,
b: 5,
c: 6,
};
let obj2 = Object.fromEntries(Object.entries(obj1).map(([k, v]) => [k, [...Array(v)].map((_, i) => v - i)]));
console.log(obj2);
答案 3 :(得分:0)
let obj1 = {a : 10, b : 5, c : 6}
let res = Object.entries(obj1).reduce((acc, cur) => {
return Object.assign(acc, {[cur[0]]: Array.from(Array(cur[1]+1).keys()).reverse().join()})
}, {})
console.log(res)