javascript - 根据条件将数组的元素替换为另一个数组的元素
问题描述
我有2个数组,
let array1 = ["1", "2", "3"]
let array2 = [{"name": "a", "id" : "1"}, {"name": "b", "id" : "2"}, {"name": "c", "id" : "3"}, {"name": "c", "id" : "4"}]
当array1元素和array2元素的值匹配时,我想用array2 的元素替换array1的内容。结果应该是这样的: id
array1 = [{"name": "a", "id" : "1"}, {"name": "b", "id" : "2"}, {"name": "c", "id" : "3"}]
我知道我可以在一个单独的数组中得到结果,但我想替换 array1 的内容而不必创建一个新数组。
我试过这个:
array1.splice(0, Infinity, ...array2)
基于对此处类似问题的回答
这导致:
array1 = [{"name": "a", "id" : "1"}, {"name": "b", "id" : "2"}, {"name": "c", "id" : "3"}, {"name": "c", "id" : "4"}]
我尝试了不同的方法来向该语句添加条件但失败了。有没有办法在上面的拼接方法中添加条件?或者,如果有更好的方法来实现它,请提出建议。
解决方案
您还可以在 array1 中搜索 array2 id,然后将 array1 的索引替换为匹配的 array2 索引。
let array1 = ["1", "2", "3"]
let array2 = [{"name": "a", "id" : "1"}, {"name": "b", "id" : "2"}, {"name": "c", "id" : "3"}, {"name": "c", "id" : "4"}]
array2.forEach(function(e){
if(array1.indexOf(e["id"]) != -1) {
array1[array1.indexOf(e["id"])] = e
}
})
console.log(array1)
编辑:我尝试了一种不同的方法,将array1中的每个值与过滤器中array2 id的值进行比较,我认为这不是一个更清洁的解决方案,但我尝试了:
let array1 = ["1", "2", "3"]
let array2 = [{"name": "a", "id" : "1"}, {"name": "b", "id" : "2"}, {"name": "c", "id" : "3"}, {"name": "c", "id" : "4"}]
array1 = array1.map(num => {
return array2.filter(dict => {
if(dict["id"] == num) {return dict}
})[0]
})
console.log(array1)
如果你可以使用 lodash,它会很短:
let array1 = ["1", "2", "3"]
let array2 = [{"name": "a", "id" : "1"}, {"name": "b", "id" : "2"}, {"name": "c", "id" : "3"}, {"name": "c", "id" : "4"}]
array1 = _.map(array1, function(o){return _.find(array2, {id: o})})
console.log(array1)
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.15/lodash.min.js"></script>
推荐阅读
- c++ - 创建一个包含指向数组的指针的结构
- javascript - 如何在 JavaScript 中的 Quiz App 中提问 5 次?
- reactjs - 尝试在 gh-pages 中部署时反应与 Babel 相关的抛出错误
- c - 如何检查用户在 InsertList() 中输入的名称是否不等于数组等待列表中已经存在的名称?
- javascript - 平铺地图JavaScript中的算法填充封闭区域
- php - 没有在laravel excel中获得下拉菜单
- c++ - 如何将 mySQL 查询结果存储在 C++ 结构中
- python-3.x - 使用 rename() 但遇到问题
- javascript - 如何使输入影响回声
- macos - iTerm2 像窗口一样在 vi 中打开命令响应