我想将两个数组折叠在一起并保留其位置
expect(fold([1, 2, 4], [2, 3, 4])).to.eql([1, 2, 3, 4])
expect(fold([5, 1, 17, 9, 3], [1, 17, 2, 9])).to.eql([5, 1, 17, 2, 9, 3])
我的最终目标是拥有此
expect(diff([a, b, d, e], [b, c, d])).to.eql({
foldedList: [a, b, c, d],
added: [c], // elements that where in 2nd but not in 1st array
removed: [e] // elements that where in 1st but not in 2nd array
})
对于added
和removed
的东西,有解决方案,但我没有发现数组的折叠。
答案 0 :(得分:1)
尝试将此作为您的第一个目标
function fold(_a, _b){
var result = [];
for(var ind = 0, ln = Math.max(_a.length, _b.length); ind < ln; ind++){
if (_a[ind] && result.indexOf(_a[ind]) === -1) result.push(_a[ind]);
if (_b[ind] && result.indexOf(_b[ind]) === -1) result.push(_b[ind]);
}
return result;
}
答案 1 :(得分:0)
我有一个稍微复杂的解决方案
function fold(arr1, arr2, sort) {
function byOrigPositions(a, b) {
var indexA1 = arr1.indexOf(a)
var indexA2 = arr2.indexOf(a)
var indexB1 = arr1.indexOf(b)
var indexB2 = arr2.indexOf(b)
if (indexA1 >= 0 && indexB1 >=0) {
return indexA1 - indexB1
}
if (indexA2 >= 0 && indexB2 >=0) {
return indexA2 - indexB2
}
if (sort) {
return sort(a, b)
}
return 0
}
return arr2.reduce(function(res, el) {
if (res.indexOf(el) < 0) {
res.push(el)
}
return res;
}, [].concat(arr1)).sort(byOrigPositions)
}
它在concat之后排序,并使用原始数组中的位置作为排序函数。作为奖励,如果无法通过这种方式计算出位置,您可以将排序功能作为第三个参数。
答案 2 :(得分:0)
我发现了一个相当丑陋的答案,但它比我之前的答案更好:
public void gv_Sorting(object sender, GridViewSortEventArgs e)
{
Response.Write("<script>alert('Wrong messages!')</script>");
Response.Write("<script type='text/javascript' language='javascript'> alert('Test')</script>");
Page.ClientScript.RegisterStartupScript(this.GetType(), "Alert", "<script type='text/javascript'>alert('blah');</script>");
Response.Write("<script language=JavaScript> alert('Hello'); </script>");
Response.Write(@"<script language='javascript'>alert('The following errors have occurred: sldka fhig vqjq hucxvibg yo7 .');</script>");
ScriptManager.RegisterStartupScript(this, typeof(Page), "UpdateMsg", "$(document).ready(function(){alert('Overrides successfully Updated.');});", true);
Page.RegisterStartupScript("LoadTxtBox", "<script language='javascript'>LoadTxtBox(\"" + item.Cells[0].Text + "\", " + x + ")</script>");
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
function LoadTxtBox(txt, txtBoxNumber) {
document.getElementById("MainContent_txt_" + txtBoxNumber + "").Text = txt;
}
它在两个数组之间切换,并尝试在另一个数组中查找当前元素。如果它找到它,它会切换对两个数组的引用,并以相反的方式做同样的事情。