Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Ember.js-使用removeObject仅删除对象的一个实例 解释_Javascript_Arrays_Ember.js - Fatal编程技术网

Javascript Ember.js-使用removeObject仅删除对象的一个实例 解释

Javascript Ember.js-使用removeObject仅删除对象的一个实例 解释,javascript,arrays,ember.js,Javascript,Arrays,Ember.js,我有一个非常简单的卡路里跟踪应用程序,它使用Nutritionix API根据用户的输入搜索食物。结果被添加到结果数组中,然后显示给用户。当用户单击其中一个项目旁边的“添加”按钮时,卡路里被添加到计数器中,食物本身被添加到todaysFood数组中(使用Ember的pushObject)。然后,在单独的表格中显示用户今天食用的食物 当用户单击其中一个todaysFood项目旁边的remove按钮时,它会触发一个动作removietem,并将所单击项目的索引传递到removietem。此索引在Em

我有一个非常简单的卡路里跟踪应用程序,它使用Nutritionix API根据用户的输入搜索食物。结果被添加到
结果
数组中,然后显示给用户。当用户单击其中一个项目旁边的“添加”按钮时,卡路里被添加到计数器中,食物本身被添加到
todaysFood
数组中(使用Ember的
pushObject
)。然后,在单独的表格中显示用户今天食用的食物

当用户单击其中一个
todaysFood
项目旁边的
remove
按钮时,它会触发一个动作
removietem
,并将所单击项目的索引传递到
removietem
。此索引在Ember的
removeObject
中用于从
todaysFood
数组中删除该项目,从而更新视图(从列表中删除该项目并从计数器中删除其卡路里)

问题 当多个相同项目被添加到
todaysFood
时,仅在其中一个项目上单击
remove
,即可删除
todaysFood
中的所有实例,并显示视图。这对我现在来说是有意义的,因为docs的例子:

var cities = ['Chicago', 'Berlin', 'Lima', 'Chicago'];
cities.removeObject('Chicago');  // ['Berlin', 'Lima']
cities.removeObject('Lima');     // ['Berlin']
cities.removeObject('Tokyo')     // ['Berlin']
然而,它也只是去除一个项目的卡路里,而不是所有的实例

因此,问题是:当单击
remove
时,如何仅删除该项的一个实例?也就是说,如果添加了两个玉米卷,并且我在其中一个上单击了
remove
,我只希望删除其中一个(从列表和卡路里中)

以下是我的
removietem
操作:

removeItem(index) {
        var self = this;

        // Store property paths for easy access
        let todaysPath = this.get('healthData').todaysFood;
        let caloriesPath = 'healthData.calories';

        this.set(caloriesPath, this.get(caloriesPath) - Math.round(todaysPath[index].fields.nf_calories));

        todaysPath.removeObject(todaysPath[index]);

    }
免责声明
我知道我可能根本没有正确处理这个问题。我愿意接受任何能让这一切变得更好的建议。谢谢

您有要删除的对象索引,因此可以尝试使用以下方法:


太简单了!这正是我所需要的,而且很有魅力。非常感谢。
todaysPath.removeAt(index);