【问题标题】:JavaScript - Pushing Objects into Array failedJavaScript - 将对象推入数组失败
【发布时间】:2021-05-06 16:13:51
【问题描述】:

我看到这个问题被问了很多,但我还没有能够解决它,所以来吧! 我正在做一个显示订单列表的项目。我希望能够按日期过滤订单。因此,我试图将每个过滤后的订单推送到一个新数组中,但这给了我以下错误:

“TypeError:filteredOrders.push 不是函数”

我试图调整我的推送语法,因为我认为我做错了,但无济于事。 每个订单都作为一个对象返回。我怎样才能将这些对象推入一个数组?我循环的订单数组也是一个对象数组。这是我的代码,用于更清晰的示例:

data: function () {
    return {
        isFilterShown: false,
        IsOrderDetailShown: false,
        selectedDateFrom: new Date(),
        selectedDateTill: new Date(),
    }
},

methods: {
    applyFilter: function () {
        let dateFrom = this.selectedDateFrom;
        let dateTill = this.selectedDateTill;
        let filteredOrders = Array;

        this.orders.forEach(function (order) {
            if (order.createdAt >= moment(dateFrom).format('DD-MM-Y') && order.createdAt <= moment(dateTill).format('DD-MM-Y')) {
                console.log(order.createdAt, order);
                return order;
            }
            filteredOrders.push(order);
        })
        // this.orders = this.filteredOrders;
        this.isFilterShown = false;
    },

控制台截图:

【问题讨论】:

  • 有道理;你给它一个类型,而不是一个类型的 instance。你可能想要let filteredOrders = []。 (在这种用法中,这比 new Array() 更规范。)类似于您正确设置日期的方式——通过创建 instance

标签: javascript arrays vue.js object array-push


【解决方案1】:

Array 是一个函数,而不是一个空数组。这一行

let filteredOrders = Array;

不创建空数组。它将函数Array 分配给filteredOrders。你可能想要

let filteredOrders = [];

【讨论】:

  • (Array 始终是一个函数——上下文无关紧要:)
  • @DaveNewton In TypeScript Array 可以是泛型类型或函数。
  • 但这是 JS,不是 TS。不管怎样——这是一个挑剔的人。
【解决方案2】:

这里的作业:

let filteredOrders = Array;

只是一个函数的类型,没有生成构造函数。 相反,您可以尝试这样做

let filteredOrders = new Array(); 
or 
let filteredOrders = [];

这将使您可以访问数组方法

【讨论】:

猜你喜欢
  • 2011-02-13
  • 1970-01-01
  • 2018-11-08
  • 2015-10-19
  • 2017-12-05
  • 2023-03-14
  • 1970-01-01
  • 2014-08-10
相关资源
最近更新 更多