【问题标题】:Insert item after each change array JS在每次更改数组 JS 后插入项目
【发布时间】:2021-06-02 11:45:01
【问题描述】:

假设我有一个这样的数组:

var array = [{date: "2021-06-02", name: "Foo" /*... and more*/}]

现在我已经对数组进行了排序

array.sort(function (a, b) {
    var keyA = new Date(a.date),
        keyB = new Date(b.date);
    if (keyA < keyB) return -1; // a.date is before b.date
    if (keyA > keyB) return 1;  // other way around

    return 0;

});

现在我想在现在排序的数组中的每个新日期之后添加{type: "new date occured", date: "", name: "New Date!"}

我怎么做?

【问题讨论】:

  • stackoverflow.com/a/38528645/7008628 => 使用reduce插入你的日期+日志对象
  • 使用array.push()
  • 问题不清楚。 ...after each new date in the now sorted array 什么是“新日期”?
  • @Martin date 键中的另一个值
  • @CreamyCheese384 然后,您必须遍历现有数组,同时连续构建第二个数组,其中每个迭代项加上一个新的分隔项,只要您遇到与前一个不同的日期。您可以使用Array.reduce() 来实现它

标签: javascript arrays reactjs


【解决方案1】:

你可以像下面这样使用

var array = [{date: "2021-06-02", name: "Foo" }, {date: "2021-06-01", name: "Bar" }, {date: "2021-06-05", name: "Hello" }]
array = array.sort(function (a, b) {
    var keyA = new Date(a.date),
        keyB = new Date(b.date);
    if (keyA < keyB) return -1; // a.date is before b.date
    if (keyA > keyB) return 1;  // other way around

    return 0;

});

console.log(array)

array.push({type: "new date occured", date: "", name: "New Date!"})

console.log(array)
[
  { date: '2021-06-01', name: 'Bar' },
  { date: '2021-06-02', name: 'Foo' },
  { date: '2021-06-05', name: 'Hello' }
]
[
  { date: '2021-06-01', name: 'Bar' },
  { date: '2021-06-02', name: 'Foo' },
  { date: '2021-06-05', name: 'Hello' },
  { type: 'new date occured', date: '', name: 'New Date!' }
]

【讨论】:

    【解决方案2】:

    我认为这回答了您的问题,尽管您实际上想要做什么还不清楚。

    const array = [{date: "2021-06-02", name: "Foo" }, {date: "2021-06-01", name: "Bar" }, {date: "2021-06-05", name: "Hello" }];
    
    function sortFunc(a, b) {
        var keyA = new Date(a.date),
            keyB = new Date(b.date);
        if (keyA < keyB) return -1; // a.date is before b.date
        if (keyA > keyB) return 1;  // other way around
        return 0;
    }
    array.sort(sortFunc);
    console.log(array);
    
    function alterDate(name, newDate) {
      const thisDate = array.find(d => d.name === name);
      if (!thisDate) return;
      thisDate.date = newDate;
      thisDate.type = "new date occured";
      array.sort(sortFunc);
    }
    alterDate("Bar", "2021-06-08");
    console.log(array);

    【讨论】:

      【解决方案3】:

      您说“插入之后”,所以在这里我从数组中的日期添加一个并使用它,为数组中的每个实例在当前对象之后插入一个新对象。我创建了一个示例数组来显示一个示例集。

      鉴于您的问题有些模棱两可,这可能不是您想要的,但应该给您一个工作点。

      我还冒昧地在原始数组中添加了 type:'old',因此它们都具有相同的属性 - 如果您愿意,可以轻松删除。

      var myArray = [{
        date: "2021-06-02",
        name: "Foo"
      }, {
        date: "2021-06-06",
        name: "bar"
      }, {
        date: "2021-06-12",
        name: "fiz"
      }, {
        date: "2021-02-21",
        name: "feb"
      }];
      
      function compare(firstEl, secondEl) {
        let keyA = new Date(firstEl.date).getTime(),
          keyB = new Date(secondEl.date).getTime();
        if (keyA < keyB) return -1; // firstEl.date is before secondEl.date
        if (keyA > keyB) return 1; // other way around
        //equal
        return 0;
      }
      
      function getNewDate(olddate) {
        let nextDay = new Date(olddate);
        nextDay.setDate(nextDay.getDate() + 1);
        let dateString = nextDay
          .toISOString("en-CA")
          .split("T")[0];
        return dateString;
      }
      myArray.sort(compare);
      // doing this just to show the 'old' with the same set of properties
      myArray.forEach(function (element) {
        element.type = "old";
      });
      i = myArray.length - 1;
      
      do {
        let replacecount = 0;
        let currItem = myArray[i];
        let nextDay = getNewDate(currItem.date);
      
        let newvalue = {
          type: 'new date occurred',
          date: nextDay,
          name: "newDate" + i
        };
        myArray.splice(i+1, 0, newvalue);
      } while (i--)
      
      console.log(myArray);

      【讨论】:

        猜你喜欢
        • 2021-12-28
        • 2012-10-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-09
        • 2016-06-23
        • 2011-04-21
        • 1970-01-01
        相关资源
        最近更新 更多