向现有对象键添加新值

时间:2020-01-14 03:40:58

标签: javascript object

我有一个对象,该对象的数字值分配给键

<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和其他几次迭代尝试。我该怎么做?

4 个答案:

答案 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)