我在JavaScript中使用splice()函数。
我无法找到ASP.NET的等效方法。有没有?
如果没有,我如何在ASP.NET中插入或删除数组的索引?
我正在尝试使用此代码编写的JavaScript代码的逻辑。尝试对ASP.NET做同样的事情,如果这会有所帮助。
var imagePath = "/ImageFolder/Gallery/AnAlbum/image.jpg";
var folders = imagePath.split("/");
var imageFile = folders[folders.length - 1];
folders.splice(folders.length - 1, 1);
var newPath = folders.join("/");
var newImageUrl = newPath + "/thumb/thumb_" + imageFile;
return newImageUrl;
编辑:
什么是拼接?
array.splice(start,deleteCount [,item1 [,item2 [,...]]])
参数
开始
开始更改数组的索引。如果大于 数组的长度,实际的起始索引将设置为长度 数组。如果是否定的,将从最后开始那么多元素。
deleteCount
一个整数,表示旧数组元素的数量 去掉。如果deleteCount为0,则不删除任何元素。在这种情况下, 你应该至少指定一个新元素。如果deleteCount更大 然后,比起从开始时开始的数组中剩余的元素数量 将删除数组末尾的所有元素。
itemN
要添加到数组的元素。如果你没有指定任何 elements,splice()只会从数组中删除元素。
返回
包含已删除元素的数组。如果只有一个元素 删除后,返回一个元素的数组。如果没有元素 删除后,返回一个空数组。
预期输出:
/ImageFolder/Gallery/AnAlbum/image.jpg
/ ImageFolder/Gallery/AnAlbum/thumb/thumb_image.jpg
答案 0 :(得分:3)
.NET中的数组具有固定大小,因此无法在数组上直接转换splice()
,但如果使用List<>
而不是数组,那么{{1} <},Insert
和RemoveRange()
方法可以满足相同的需求。
Remove
答案 1 :(得分:3)
而不是尝试操作数组(如果你仍然想要,StriplingWarrior has a good answer showing you how).NET有一个更大的工具集来直接处理路径。您的问题可以简化为
var imagePath = "/ImageFolder/Gallery/AnAlbum/image.jpg";
var folder = Path.GetDirectoryName(imagePath);
var imageFile = Path.GetFileName(imagePath);
var newImageUrl = folder + "/thumb/thumb_" + imageFile;
return newImageUrl;
答案 2 :(得分:2)
您可以改为使用List:
var imagePath = "/ImageFolder/Gallery/AnAlbum/image.jpg";
var folders = imagePath.Split('/');
var imageFile = folders[folders.Length - 1];
var foldersList = new List<String>(folders);
foldersList.RemoveAt(folders.Length - 1);
var newPath = String.Join("/", foldersList.ToArray());
var newImageUrl = newPath + "/thumb/thumb_" + imageFile;
return newImageUrl;
答案 3 :(得分:2)
使用List
代替数组。然后,您可以使用List.Insert(index, item)
和List.RemoveAt(index)
RemoveAt
并没有像splice
那样返回您的值。但是,无论如何你都不会使用它。
答案 4 :(得分:1)
你可以使用正则表达式一次完成整个过程。
var imagePath = "/ImageFolder/Gallery/AnAlbum/image.jpg";
var newImageUrl = Regex.Replace(imagePath, "/(?!.*/)", "/thumb/thumb_");
Console.WriteLine (imagePath);
// ouput is /ImageFolder/Gallery/AnAlbum/image.jpg
Console.WriteLine (newImageUrl);
// output is /ImageFolder/Gallery/AnAlbum/thumb/thumb_image.jpg
该模式正在寻找最后一个斜线。 (斜线之后没有出现其他斜杠)
答案 5 :(得分:1)
您可以为List编写扩展方法。
public static class SpliceExtension
{
public static List<T> Splice<T>(this List<T> list, int offset, int count)
{
return list.Skip(offset).Take(count).ToList();
}
}
答案 6 :(得分:0)
您不能轻易地在.NET中拼接数组,因为数组是固定大小的。最接近的是创建一个新数组并复制您想要保留的项目。
您可以使用字符串操作方法创建新字符串,而不是拆分字符串:
string imagePath = "/ImageFolder/Gallery/AnAlbum/image.jpg";
return imagePath.Insert(imagePath.LastIndexOf('/') + 1, "thumb/thumb_");