在Javascript中,我们有一个数组:
let arr1 = [1, 2, 3, 4, 5];
...以及对象数组:
let arr2 = [ {name: "banana", id: 1},
{name: "mango", id: 3} ];
我想从arr1
的{{1}}的id = arr2
的值中删除所有元素,并返回这样的数组:
arr1
这是我尝试过的方法,但似乎不起作用。
[2, 4, 5]
我该如何实现?我可以使用let newArr = arr1.filter(
x => !arr2.includes(e => e.id === x)
)
以及ES6。
答案 0 :(得分:3)
您可以先创建 id 和 age 的临时目录,然后将public class ShopAdapter extends BaseAdapter {
@Override
public int getCount() {
return Image1.length;
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
convertView = getLayoutInflater().inflate(R.layout.itemlist, null);
((ImageView) convertView.findViewById(R.id.imgItem1)).setImageResource(Image1[position]);
((TextView) convertView.findViewById(R.id.tvName1)).setText(Name1[position]);
((TextView) convertView.findViewById(R.id.tvDescription1)).setText(Description1[position]);
convertView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) { //need a seperate Statement right here
if (getCount() == 1) {
if (points >= 10) {
updateLps1(10);
updatePoints1(10);
save();
} else {
(new AlertDialog.Builder(MainActivity.this)).setMessage("You need more Heals!").show();
}
}
}
});
return convertView;
}
}
与filter()
includes()
答案 1 :(得分:3)
.includes()
方法不允许您将方法传递给它来定义相等性。您可以改用.some()
,它允许您指定以下内容:
const arr1 = [1, 2, 3, 4, 5];
const arr2 = [
{name: "banana", id: 1},
{name: "mango", id: 3}
];
const newArr = arr1.filter(x => !arr2.some(e => e.id === x))
console.log(newArr);
一种更有效的方法是从数组中的对象中获取所有id
属性,然后将其放入Set中以进行快速查找。然后像这样将.filter()
与.has()
一起使用:
const arr1 = [1, 2, 3, 4, 5];
const arr2 = [
{name: "banana", id: 1},
{name: "mango", id: 3}
];
const idSet = new Set(arr2.map(({id}) => id));
const newArr = arr1.filter(x => !idSet.has(x))
console.log(newArr);
答案 2 :(得分:1)
let arr1 = [1, 2, 3, 4, 5];
let arr2 = [ {name: "banana", id: 1},
{name: "mango", id: 3} ];
arr1.map((item,index) =>
arr2.map(object => {
if(item == object.id) arr1.splice(index,1)
})
)
console.warn(arr1) /// output [2, 4, 5]