我正在构建一个小应用,您可以将最多10个项目添加到"包"。
将商品添加到购物袋后,会将其添加到bag []
。每个项目都有id
。
但是,我从API调用中获取了这些项目,因此当我获得项目时,我想确保如果我已经将一个项目添加到包中,那么它并不会对包状态造成影响。
以下是我从API收到项目时所做的事情:
items.map(i => {
i.inBag: false
});
但是,即使我已将商品添加到购物袋中,也会重置inBag
。将项目添加到包中时,inBag
将翻转为true。但是下次进行API调用时,它会重置为false
。
如何确保从API收到内容时,我还会检查i.id
中的项目中是否存在bag[]
?
如果我在每次迭代中进行比较,我担心它会太慢,所以我想知道是否有更好的方法。
由于
答案 0 :(得分:0)
试试这个;
如果bag不是对象数组
#/bin/sh
path='./path'
list="$path/*.tar.gz"
for file in `ls ./da/*.tar.gz.*`
do
let i++
if [[ -f $(find $path/*.tar.gz.$i) ]]
then
echo "file $path/*.tar.gz.$i found."
list="$list $path/*.tar.gz.$i"
else
echo "file $path/*.tar.gz.$i not found!"
fi
done
cat $list > full.tar.gz
tar zxvf ./full.tar.gz -C $path
# rm -rf $list
如果bag是对象数组
if(bag.indexOf(received_item_id)==-1)
{
//write code to insert item into bag[]
}
答案 1 :(得分:0)
鉴于这些数组:
arrayA = [{id: 2003, name:"one"}, {id: 2004, name:"two"}];
arrayB = [{id: 2003, name:"foo"}, {id: 2005, name:"three"}];
要仅添加新的id
值,请使用Array.prototype.concat()和Array.prototype.filter():
arrayA.concat(arrayB.filter( v => !arrayA.filter(e => e.id === v.id).length ));
给出了:
[{id: 2003, name:"one"}, {id: 2004, name:"two"}, {id: 2005, name:"three"}];
根据Bergi的建议,这更加清晰:
arrayA.concat(arrayB.filter( v => arrayA.every(e => e.id !== v.id) ));
这意味着:与arrayA连接arrayB中的所有元素,其中arrayA中的每个元素都保持arrayB中不存在任何id对象的条件。